You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by jo...@apache.org on 2017/04/26 18:01:32 UTC

[26/34] ambari git commit: AMBARI-20844. Remove docker java client from Log Search it framework (oleewere)

AMBARI-20844. Remove docker java client from Log Search it framework (oleewere)


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

Branch: refs/heads/branch-feature-AMBARI-12556
Commit: 4d8c8e3757e774cf7b6ad544ebbd93c744632ea9
Parents: 2ff8c01
Author: oleewere <ol...@gmail.com>
Authored: Tue Apr 25 14:14:58 2017 +0200
Committer: oleewere <ol...@gmail.com>
Committed: Wed Apr 26 12:44:11 2017 +0200

----------------------------------------------------------------------
 ambari-logsearch/ambari-logsearch-it/pom.xml    |  21 +-
 .../logsearch/domain/StoryDataRegistry.java     |  33 +--
 .../logsearch/steps/LogSearchDockerSteps.java   | 201 ++++++-------------
 .../ambari/logsearch/steps/SolrSteps.java       |   4 +-
 .../story/log_search_api_query_story.story      |   2 +-
 ambari-logsearch/docker/logsearch-docker.sh     |  10 +-
 6 files changed, 103 insertions(+), 168 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/4d8c8e37/ambari-logsearch/ambari-logsearch-it/pom.xml
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-it/pom.xml b/ambari-logsearch/ambari-logsearch-it/pom.xml
index be7ab57..ee97e99 100644
--- a/ambari-logsearch/ambari-logsearch-it/pom.xml
+++ b/ambari-logsearch/ambari-logsearch-it/pom.xml
@@ -35,6 +35,7 @@
     <jbehave.version>4.0.5</jbehave.version>
     <jersey.version>2.23.1</jersey.version>
     <jackson-jaxrs.version>2.6.4</jackson-jaxrs.version>
+    <forkCount>1</forkCount>
   </properties>
 
   <dependencies>
@@ -58,11 +59,6 @@
       <version>2.5</version>
     </dependency>
     <dependency>
-      <groupId>com.github.docker-java</groupId>
-      <artifactId>docker-java</artifactId>
-      <version>3.0.0</version>
-    </dependency>
-    <dependency>
       <groupId>com.fasterxml.jackson.jaxrs</groupId>
       <artifactId>jackson-jaxrs-json-provider</artifactId>
       <version>${jackson-jaxrs.version}</version>
@@ -87,6 +83,21 @@
       <artifactId>zjsonpatch</artifactId>
       <version>0.2.4</version>
     </dependency>
+    <dependency>
+      <groupId>org.apache.ambari</groupId>
+      <artifactId>ambari-logsearch-server</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.ambari</groupId>
+      <artifactId>ambari-logsearch-web</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.ambari</groupId>
+      <artifactId>ambari-logsearch-logfeeder</artifactId>
+      <version>${project.version}</version>
+    </dependency>
   </dependencies>
 
   <build>

http://git-wip-us.apache.org/repos/asf/ambari/blob/4d8c8e37/ambari-logsearch/ambari-logsearch-it/src/test/java/org/apache/ambari/logsearch/domain/StoryDataRegistry.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-it/src/test/java/org/apache/ambari/logsearch/domain/StoryDataRegistry.java b/ambari-logsearch/ambari-logsearch-it/src/test/java/org/apache/ambari/logsearch/domain/StoryDataRegistry.java
index 564972a..cb72376 100644
--- a/ambari-logsearch/ambari-logsearch-it/src/test/java/org/apache/ambari/logsearch/domain/StoryDataRegistry.java
+++ b/ambari-logsearch/ambari-logsearch-it/src/test/java/org/apache/ambari/logsearch/domain/StoryDataRegistry.java
@@ -18,19 +18,16 @@
  */
 package org.apache.ambari.logsearch.domain;
 
-import com.github.dockerjava.api.DockerClient;
-import com.github.dockerjava.core.DockerClientConfig;
-import org.apache.solr.client.solrj.impl.CloudSolrClient;
+import org.apache.solr.client.solrj.SolrClient;
 
 public class StoryDataRegistry {
   public static final StoryDataRegistry INSTANCE = new StoryDataRegistry();
 
-  private DockerClient dockerClient;
-  private DockerClientConfig dockerClientConfig;
-  private CloudSolrClient cloudSolrClient;
+  private SolrClient solrClient;
   private boolean logsearchContainerStarted = false;
   private String dockerHost;
   private String ambariFolder;
+  private String shellScriptLocation;
   private final int solrPort = 8886;
   private final int logsearchPort = 61888;
   private final int zookeeperPort = 9983;
@@ -60,14 +57,6 @@ public class StoryDataRegistry {
     return zookeeperPort;
   }
 
-  public DockerClient getDockerClient() {
-    return dockerClient;
-  }
-
-  public void setDockerClient(DockerClient dockerClient) {
-    this.dockerClient = dockerClient;
-  }
-
   public String getServiceLogsCollection() {
     return serviceLogsCollection;
   }
@@ -76,12 +65,12 @@ public class StoryDataRegistry {
     return auditLogsCollection;
   }
 
-  public CloudSolrClient getCloudSolrClient() {
-    return cloudSolrClient;
+  public SolrClient getSolrClient() {
+    return solrClient;
   }
 
-  public void setCloudSolrClient(CloudSolrClient cloudSolrClient) {
-    this.cloudSolrClient = cloudSolrClient;
+  public void setSolrClient(SolrClient solrClient) {
+    this.solrClient = solrClient;
   }
 
   public String getAmbariFolder() {
@@ -92,12 +81,12 @@ public class StoryDataRegistry {
     this.ambariFolder = ambariFolder;
   }
 
-  public DockerClientConfig getDockerClientConfig() {
-    return dockerClientConfig;
+  public String getShellScriptLocation() {
+    return shellScriptLocation;
   }
 
-  public void setDockerClientConfig(DockerClientConfig dockerClientConfig) {
-    this.dockerClientConfig = dockerClientConfig;
+  public void setShellScriptLocation(String shellScriptLocation) {
+    this.shellScriptLocation = shellScriptLocation;
   }
 
   public boolean isLogsearchContainerStarted() {

http://git-wip-us.apache.org/repos/asf/ambari/blob/4d8c8e37/ambari-logsearch/ambari-logsearch-it/src/test/java/org/apache/ambari/logsearch/steps/LogSearchDockerSteps.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-it/src/test/java/org/apache/ambari/logsearch/steps/LogSearchDockerSteps.java b/ambari-logsearch/ambari-logsearch-it/src/test/java/org/apache/ambari/logsearch/steps/LogSearchDockerSteps.java
index 91e0b10..32e8cba 100644
--- a/ambari-logsearch/ambari-logsearch-it/src/test/java/org/apache/ambari/logsearch/steps/LogSearchDockerSteps.java
+++ b/ambari-logsearch/ambari-logsearch-it/src/test/java/org/apache/ambari/logsearch/steps/LogSearchDockerSteps.java
@@ -18,23 +18,13 @@
  */
 package org.apache.ambari.logsearch.steps;
 
-import com.github.dockerjava.api.DockerClient;
-import com.github.dockerjava.api.command.CreateContainerResponse;
-import com.github.dockerjava.api.model.Bind;
-import com.github.dockerjava.api.model.Container;
-import com.github.dockerjava.api.model.ExposedPort;
-import com.github.dockerjava.api.model.Ports;
-import com.github.dockerjava.api.model.Volume;
-import com.github.dockerjava.core.DockerClientBuilder;
-import com.github.dockerjava.core.DockerClientConfig;
-import com.github.dockerjava.core.command.BuildImageResultCallback;
-import com.google.common.base.Preconditions;
 import org.apache.ambari.logsearch.domain.StoryDataRegistry;
-import org.apache.commons.lang.ArrayUtils;
+import org.apache.solr.client.solrj.SolrClient;
 import org.apache.solr.client.solrj.SolrQuery;
 import org.apache.solr.client.solrj.SolrServerException;
-import org.apache.solr.client.solrj.impl.CloudSolrClient;
+import org.apache.solr.client.solrj.impl.LBHttpSolrClient;
 import org.apache.solr.client.solrj.response.QueryResponse;
+import org.apache.solr.client.solrj.response.SolrPingResponse;
 import org.apache.solr.common.SolrDocumentList;
 import org.jbehave.core.annotations.AfterStories;
 import org.jbehave.core.annotations.BeforeStories;
@@ -43,12 +33,13 @@ import org.jbehave.core.annotations.When;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import java.io.BufferedReader;
 import java.io.File;
 import java.io.IOException;
+import java.io.InputStreamReader;
 import java.net.InetSocketAddress;
 import java.net.Socket;
 import java.net.URL;
-import java.util.List;
 
 public class LogSearchDockerSteps {
 
@@ -58,69 +49,22 @@ public class LogSearchDockerSteps {
   public void setupLogSearchContainer() throws Exception {
     boolean logsearchStarted = StoryDataRegistry.INSTANCE.isLogsearchContainerStarted();
     if (!logsearchStarted) {
-      DockerClient dockerClient = StoryDataRegistry.INSTANCE.getDockerClient();
       LOG.info("Create new docker container for Log Search ..");
       URL location = LogSearchDockerSteps.class.getProtectionDomain().getCodeSource().getLocation();
       String ambariFolder = new File(location.toURI()).getParentFile().getParentFile().getParentFile().getParent();
       StoryDataRegistry.INSTANCE.setAmbariFolder(ambariFolder);
-      String dockerBaseDirectory = ambariFolder + "/ambari-logsearch/docker";
-      String dockerFileLocation = dockerBaseDirectory + "/Dockerfile";
-
-      String imageId = dockerClient.buildImageCmd()
-        .withTag("ambari-logsearch:v1.0")
-        .withBaseDirectory(new File(dockerBaseDirectory))
-        .withDockerfile(new File(dockerFileLocation))
-        .exec(new BuildImageResultCallback())
-        .awaitImageId();
-      LOG.info("Docker image id: {}", imageId);
-
-      removeLogSearchContainerIfExists();
-
-      // volume bindings
-      Volume testLogsVolume = new Volume("/root/test-logs");
-      Volume testConfigVolume = new Volume("/root/test-config");
-      Volume ambariVolume = new Volume("/root/ambari");
-      Volume logfeederClassesVolume = new Volume("/root/ambari/ambari-logsearch/ambari-logsearch-logfeeder/target/package/classes");
-      Volume logsearchClassesVolume = new Volume("/root/ambari/ambari-logsearch/ambari-logsearch-server/target/package/classes");
-      Volume logsearchWebappVolume = new Volume("/root/ambari/ambari-logsearch/ambari-logsearch-server/target/package/classes/webapps/app");
-      Volume logsearchWebappLibsVolume = new Volume("/root/ambari/ambari-logsearch/ambari-logsearch-server/target/package/classes/webapps/app/libs/bower");
-      Bind testLogsBind = new Bind(ambariFolder +"/ambari-logsearch/docker/test-logs", testLogsVolume);
-      Bind testConfigBind = new Bind(ambariFolder +"/ambari-logsearch/docker/test-config", testConfigVolume);
-      Bind ambariRootBind = new Bind(ambariFolder, ambariVolume);
-      Bind logfeederClassesBind = new Bind(ambariFolder + "/ambari-logsearch/ambari-logsearch-logfeeder/target/classes", logfeederClassesVolume);
-      Bind logsearchClassesBind = new Bind(ambariFolder + "/ambari-logsearch/ambari-logsearch-server/target/classes", logsearchClassesVolume);
-      Bind logsearchWebappBind = new Bind(ambariFolder + "/ambari-logsearch/ambari-logsearch-web/src/main/webapp", logsearchWebappVolume);
-      Bind logsearchWebappLibsBind = new Bind(ambariFolder + "/ambari-logsearch/ambari-logsearch-web/target/libs", logsearchWebappLibsVolume);
-
-      // port bindings
-      Ports ports = new Ports();
-      ports.bind(new ExposedPort(5005), new Ports.Binding("0.0.0.0", "5005"));
-      ports.bind(new ExposedPort(5006), new Ports.Binding("0.0.0.0", "5006"));
-      ports.bind(new ExposedPort(StoryDataRegistry.INSTANCE.getSolrPort()), new Ports.Binding("0.0.0.0", "8886"));
-      ports.bind(new ExposedPort(StoryDataRegistry.INSTANCE.getLogsearchPort()), new Ports.Binding("0.0.0.0", "61888"));
-      ports.bind(new ExposedPort(StoryDataRegistry.INSTANCE.getZookeeperPort()), new Ports.Binding("0.0.0.0", "9983"));
-
-      LOG.info("Creating docker cointainer...");
-      CreateContainerResponse createResponse = dockerClient.createContainerCmd("ambari-logsearch:v1.0")
-        .withHostName("logsearch.apache.org")
-        .withName("logsearch")
-        .withVolumes(testLogsVolume, testConfigVolume, ambariVolume, logfeederClassesVolume, logsearchClassesVolume, logsearchWebappVolume, logsearchWebappLibsVolume)
-        .withBinds(testLogsBind, testConfigBind, ambariRootBind, logfeederClassesBind, logsearchClassesBind, logsearchWebappBind, logsearchWebappLibsBind)
-        .withExposedPorts(
-          new ExposedPort(StoryDataRegistry.INSTANCE.getLogsearchPort()),
-          new ExposedPort(5005),
-          new ExposedPort(5006),
-          new ExposedPort(StoryDataRegistry.INSTANCE.getSolrPort()),
-          new ExposedPort(StoryDataRegistry.INSTANCE.getZookeeperPort()))
-        .withPortBindings(ports)
-        .exec();
-      LOG.info("Created docker container id: {}", createResponse.getId());
-
-      dockerClient.startContainerCmd(createResponse.getId()).exec();
+      String shellScriptLocation = ambariFolder + "/ambari-logsearch/docker/logsearch-docker.sh";
+      StoryDataRegistry.INSTANCE.setShellScriptLocation(shellScriptLocation);
+      String output = runCommand(new String[]{StoryDataRegistry.INSTANCE.getShellScriptLocation(), "start"});
+      LOG.info("Command output: {}", output);
       StoryDataRegistry.INSTANCE.setLogsearchContainerStarted(true);
-      String dockerHostFromUri = StoryDataRegistry.INSTANCE.getDockerClientConfig().getDockerHost().getHost();
+
+      // TODO: create a script which returns the proper host for docker, use: runCommand or an env variable
+      String dockerHostFromUri = "localhost";
+
       StoryDataRegistry.INSTANCE.setDockerHost(dockerHostFromUri);
       checkHostAndPortReachable(dockerHostFromUri, StoryDataRegistry.INSTANCE.getLogsearchPort(), "LogSearch");
+      waitUntilSolrIsUp();
       waitUntilSolrHasAnyData();
 
       LOG.info("Waiting for logfeeder to finish the test log parsings... (10 sec)");
@@ -131,93 +75,69 @@ public class LogSearchDockerSteps {
   @When("logfeeder started (parse logs & send data to solr)")
   public void logfeederStarted() throws Exception {
     // TODO: run ps aux to check LogFeeder process with docker exec
-    /**
-    DockerClient dockerClient = StoryDataRegistry.INSTANCE.getDockerClient();
-    ExecCreateCmdResponse execResp = dockerClient
-      .execCreateCmd(containerId)
-      .withAttachStdout(true)
-      .withCmd("ps", "aux").exec();
-    execResp.getId();
-    ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
-    ExecStartResultCallback res = dockerClient
-      .execStartCmd(execResp.getId())
-      .withDetach(true)
-      .withTty(true)
-      .exec(new ExecStartResultCallback(outputStream,  outputStream)).awaitCompletion();
-     **/
   }
 
   @BeforeStories
   public void checkDockerApi() {
-    LOG.info("Tries to setup docker client configuration");
-    final String dockerHost = System.getenv("DOCKER_HOST");
-    final String dockerCertPath = System.getenv("DOCKER_CERT_PATH");
-    final String dockerApiVersion = System.getenv("DOCKER_API_VERSION") == null ? "1.20" : System.getenv("DOCKER_API_VERSION");
-
-    Preconditions.checkArgument(dockerHost != null, "Set 'DOCKER_HOST' env variable");
-    Preconditions.checkArgument(dockerCertPath != null, "Set 'DOCKER_CERT_PATH' env variable");
-    LOG.info("DOCKER_HOST: {}", dockerHost);
-    LOG.info("DOCKER_CERT_PATH: {}", dockerCertPath);
-    LOG.info("DOCKER_API_VERSION: {}", dockerApiVersion);
-    DockerClientConfig dockerClientConfig = DockerClientConfig.createDefaultConfigBuilder()
-      .withDockerHost(dockerHost)
-      .withDockerCertPath(dockerCertPath)
-      .withApiVersion(dockerApiVersion)
-      .withDockerTlsVerify(true)
-      .build();
-    StoryDataRegistry.INSTANCE.setDockerClientConfig(dockerClientConfig);
-    DockerClient dockerClient = DockerClientBuilder.getInstance(dockerClientConfig).build();
-    StoryDataRegistry.INSTANCE.setDockerClient(dockerClient);
-    LOG.info("Docker client setup successfully.");
+    // TODO: check docker is up
   }
 
   @AfterStories
   public void removeLogSearchContainer() {
-    removeLogSearchContainerIfExists();
+    runCommand(new String[]{StoryDataRegistry.INSTANCE.getShellScriptLocation(), "stop"});
   }
 
-  private void removeLogSearchContainerIfExists() {
-    DockerClient dockerClient = StoryDataRegistry.INSTANCE.getDockerClient();
-    List<Container> containerList = dockerClient
-      .listContainersCmd()
-      .withShowAll(true)
-      .exec();
-
-    boolean isLogSearchContainerExists = false;
-    String containerId = null;
-    for (Container container : containerList) {
-      isLogSearchContainerExists = ArrayUtils.contains(container.getNames(), "/logsearch");
-      if (isLogSearchContainerExists) {
-        containerId = container.getId();
-        break;
+  private void waitUntilSolrIsUp() throws Exception {
+    int maxTries = 30;
+    boolean solrIsUp = false;
+    for (int tries = 1; tries < maxTries; tries++) {
+      try {
+        SolrClient solrClient = new LBHttpSolrClient(String.format("http://%s:%d/solr/%s_shard0_replica1",
+          StoryDataRegistry.INSTANCE.getDockerHost(),
+          StoryDataRegistry.INSTANCE.getSolrPort(),
+          StoryDataRegistry.INSTANCE.getServiceLogsCollection()));
+        StoryDataRegistry.INSTANCE.setSolrClient(solrClient);
+        SolrPingResponse pingResponse = solrClient.ping();
+        if (pingResponse.getStatus() != 0) {
+          LOG.info("Solr is not up yet, retrying... ({})", tries);
+          Thread.sleep(2000);
+        } else {
+          solrIsUp = true;
+          LOG.info("Solr is up and running");
+          break;
+        }
+      } catch (Exception e) {
+        LOG.error("Error occurred during pinging solr ({}). retrying {} times", e.getMessage(), tries);
+        Thread.sleep(2000);
       }
     }
 
-    if (isLogSearchContainerExists) {
-      LOG.info("Remove logsearch container: {}", containerId);
-      dockerClient.removeContainerCmd(containerId).withForce(true).exec();
+    if (!solrIsUp) {
+      throw new IllegalStateException(String.format("Solr is not up after %d tries", maxTries));
     }
   }
 
   private void waitUntilSolrHasAnyData() throws IOException, SolrServerException, InterruptedException {
     boolean solrHasData = false;
-    CloudSolrClient solrClient = new CloudSolrClient(String.format("%s:%d",
-      StoryDataRegistry.INSTANCE.getDockerHost(),
-      StoryDataRegistry.INSTANCE.getZookeeperPort()));
-    StoryDataRegistry.INSTANCE.setCloudSolrClient(solrClient);
-    SolrQuery solrQuery = new SolrQuery();
-    solrQuery.setQuery("*:*");
 
     int maxTries = 60;
     for (int tries = 1; tries < maxTries; tries++) {
-      QueryResponse queryResponse = solrClient.query(StoryDataRegistry.INSTANCE.getServiceLogsCollection(), solrQuery);
-      SolrDocumentList list = queryResponse.getResults();
-      if (list.size() > 0) {
-        solrHasData = true;
-        break;
-      } else {
+      try {
+        SolrClient solrClient = StoryDataRegistry.INSTANCE.getSolrClient();
+        SolrQuery solrQuery = new SolrQuery();
+        solrQuery.setQuery("*:*");
+        QueryResponse queryResponse = solrClient.query(solrQuery);
+        SolrDocumentList list = queryResponse.getResults();
+        if (list.size() > 0) {
+          solrHasData = true;
+          break;
+        } else {
+          Thread.sleep(2000);
+          LOG.info("Solr has no data yet, retrying... ({} tries)", tries);
+        }
+      } catch (Exception e) {
+        LOG.error("Error occurred during checking solr ({}). retrying {} times", e.getMessage(), tries);
         Thread.sleep(2000);
-        LOG.info("Solr has no data yet, retrying...");
       }
     }
     if (!solrHasData) {
@@ -243,4 +163,15 @@ public class LogSearchDockerSteps {
       throw new IllegalStateException(String.format("%s is not reachable after %s tries", serviceName, maxTries));
     }
   }
+
+
+  private String runCommand(String[] command) {
+    try {
+      Process process = Runtime.getRuntime().exec(command);
+      BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
+      return reader.readLine();
+    } catch (Exception e) {
+      throw new RuntimeException("Error during execute shell command: ", e);
+    }
+  }
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/4d8c8e37/ambari-logsearch/ambari-logsearch-it/src/test/java/org/apache/ambari/logsearch/steps/SolrSteps.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-it/src/test/java/org/apache/ambari/logsearch/steps/SolrSteps.java b/ambari-logsearch/ambari-logsearch-it/src/test/java/org/apache/ambari/logsearch/steps/SolrSteps.java
index 7c72ca7..4420540 100644
--- a/ambari-logsearch/ambari-logsearch-it/src/test/java/org/apache/ambari/logsearch/steps/SolrSteps.java
+++ b/ambari-logsearch/ambari-logsearch-it/src/test/java/org/apache/ambari/logsearch/steps/SolrSteps.java
@@ -35,12 +35,12 @@ public class SolrSteps {
   @Then("the number of <component> docs is: <docSize>")
   public void numberOfDocsForComponent(@Named("component") String component, @Named("docSize") int docSize)
     throws IOException, SolrServerException, InterruptedException {
-    SolrClient solrClient = StoryDataRegistry.INSTANCE.getCloudSolrClient();
+    SolrClient solrClient = StoryDataRegistry.INSTANCE.getSolrClient();
     SolrQuery solrQuery = new SolrQuery();
     solrQuery.setQuery(String.format("type:%s", component));
     solrQuery.setStart(0);
     solrQuery.setRows(20);
-    QueryResponse queryResponse = solrClient.query(StoryDataRegistry.INSTANCE.getServiceLogsCollection(), solrQuery);
+    QueryResponse queryResponse = solrClient.query(solrQuery);
     SolrDocumentList list = queryResponse.getResults();
     Assert.assertEquals(docSize, list.size());
   }

http://git-wip-us.apache.org/repos/asf/ambari/blob/4d8c8e37/ambari-logsearch/ambari-logsearch-it/src/test/resources/org/apache/ambari/logsearch/story/log_search_api_query_story.story
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-it/src/test/resources/org/apache/ambari/logsearch/story/log_search_api_query_story.story b/ambari-logsearch/ambari-logsearch-it/src/test/resources/org/apache/ambari/logsearch/story/log_search_api_query_story.story
index 5abe8b4..cfaa359 100644
--- a/ambari-logsearch/ambari-logsearch-it/src/test/resources/org/apache/ambari/logsearch/story/log_search_api_query_story.story
+++ b/ambari-logsearch/ambari-logsearch-it/src/test/resources/org/apache/ambari/logsearch/story/log_search_api_query_story.story
@@ -14,4 +14,4 @@ Then The api query result is <jsonResult>
 Examples:
 |apiQuery|jsonResult|
 |/api/v1/service/logs/schema/fields|service-log-schema.json|
-|/api/v1/service/logs/levels/counts/namevalues?page=0&pageSize=25&startIndex=0&q=*%3A*|service-log-level-counts-values.json|
\ No newline at end of file
+|/api/v1/service/logs/levels/counts?page=0&pageSize=25&startIndex=0&q=*%3A*|service-log-level-counts-values.json|
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/4d8c8e37/ambari-logsearch/docker/logsearch-docker.sh
----------------------------------------------------------------------
diff --git a/ambari-logsearch/docker/logsearch-docker.sh b/ambari-logsearch/docker/logsearch-docker.sh
index 1fdcd8c..eab850e 100755
--- a/ambari-logsearch/docker/logsearch-docker.sh
+++ b/ambari-logsearch/docker/logsearch-docker.sh
@@ -33,12 +33,14 @@ function build_logsearch_container() {
 function start_logsearch_container() {
   setup_profile
   source $sdir/Profile
-  : ${AMBARI_LOCATION:?"Please set the AMBARI_LOCATION in Profile"}
+  pushd $sdir/../../
+  local AMBARI_LOCATION=$(pwd)
+  popd
   : ${MAVEN_REPOSITORY_LOCATION:?"Please set the MAVEN_REPOSITORY_LOCATION in Profile"}
   kill_logsearch_container
   echo "Run Log Search container"
   docker run -d --name logsearch --hostname logsearch.apache.org \
-    -v $AMBARI_LOCATION:/root/ambari -v $MAVEN_REPOSITORY_LOCATION:/root/.m2 $LOGSEARCH_EXPOSED_PORTS $LOGSEARCH_ENV_OPTS $LOGSEARCH_EXTRA_OPTS $LOGSEARCH_VOLUME_OPTS \
+    -v $AMBARI_LOCATION:/root/ambari -v $MAVEN_REPOSITORY_LOCATION:/root/.m2 $LOGSEARCH_EXPOSED_PORTS $LOGSEARCH_ENV_OPTS $LOGSEARCH_EXTRA_OPTS $LOGSEARCH_VOLUME_OPTS -p 9983:9983 \
     -v $AMBARI_LOCATION/ambari-logsearch/ambari-logsearch-logfeeder/target/classes:/root/ambari/ambari-logsearch/ambari-logsearch-logfeeder/target/package/classes \
     -v $AMBARI_LOCATION/ambari-logsearch/ambari-logsearch-server/target/classes:/root/ambari/ambari-logsearch/ambari-logsearch-server/target/package/classes \
     -v $AMBARI_LOCATION/ambari-logsearch/ambari-logsearch-web/src/main/webapp:/root/ambari/ambari-logsearch/ambari-logsearch-server/target/package/classes/webapps/app \
@@ -55,8 +57,10 @@ function setup_profile() {
     echo "Profile file exists"
   else
     echo "Profile does not exist, Creating a new one..."
+    pushd $sdir/../../
+    local AMBARI_LOCATION=$(pwd)
+    popd
     cat << EOF > $sdir/Profile
-AMBARI_LOCATION=$HOME/prj/ambari
 MAVEN_REPOSITORY_LOCATION=$HOME/.m2
 LOGSEARCH_EXPOSED_PORTS="-p 8886:8886 -p 61888:61888 -p 5005:5005 -p 5006:5006"
 LOGSEARCH_ENV_OPTS="-e LOGFEEDER_DEBUG_SUSPEND=n -e LOGSEARCH_DEBUG_SUSPEND=n -e COMPONENT_LOG=logsearch -e LOGSEARCH_HTTPS_ENABLED=false -e LOGSEARCH_SOLR_SSL_ENABLED=false -e GENERATE_KEYSTORE_AT_START=false"