Sfoglia il codice sorgente

AMBARI-18310. Refactor logsearch portal side code - Part 2 (oleewere)

Change-Id: Icd40f5893085a296803fb339419d13f99acfa04a
oleewere 9 anni fa
parent
commit
3d62b00470
88 ha cambiato i file con 1392 aggiunte e 1064 eliminazioni
  1. 5 0
      ambari-logsearch/ambari-logsearch-it/pom.xml
  2. 95 0
      ambari-logsearch/ambari-logsearch-it/src/test/java/org/apache/ambari/logsearch/steps/LogSearchApiSteps.java
  3. 6 7
      ambari-logsearch/ambari-logsearch-it/src/test/java/org/apache/ambari/logsearch/steps/SolrSteps.java
  4. 4 14
      ambari-logsearch/ambari-logsearch-it/src/test/java/org/apache/ambari/logsearch/story/LogSearchApiQueryStory.java
  5. 3 1
      ambari-logsearch/ambari-logsearch-it/src/test/java/org/apache/ambari/logsearch/story/LogSearchStory.java
  6. 17 0
      ambari-logsearch/ambari-logsearch-it/src/test/resources/org/apache/ambari/logsearch/story/log_search_api_query_story.story
  7. 9 7
      ambari-logsearch/ambari-logsearch-it/src/test/resources/org/apache/ambari/logsearch/story/logfeeder_parsing_story.story
  8. 33 0
      ambari-logsearch/ambari-logsearch-it/src/test/resources/test-output/service-log-level-counts-values.json
  9. 18 0
      ambari-logsearch/ambari-logsearch-it/src/test/resources/test-output/service-log-schema.json
  10. 6 3
      ambari-logsearch/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/output/OutputSolr.java
  11. 6 0
      ambari-logsearch/ambari-logsearch-portal/pom.xml
  12. 31 7
      ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/LogSearch.java
  13. 3 13
      ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/common/ExternalServerClient.java
  14. 1 40
      ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/conf/ApplicationConfig.java
  15. 11 1
      ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/conf/AuthConfig.java
  16. 112 0
      ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/conf/SecurityConfig.java
  17. 0 1
      ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/dao/SolrDaoBase.java
  18. 1 12
      ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/dao/UserDao.java
  19. 25 19
      ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/manager/AuditLogsManager.java
  20. 3 3
      ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/manager/PublicManager.java
  21. 40 102
      ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/manager/ServiceLogsManager.java
  22. 2 2
      ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/model/response/AuditLogData.java
  23. 27 21
      ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/query/QueryGeneration.java
  24. 78 0
      ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/query/SearchCriteriaConstants.java
  25. 8 8
      ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/query/converter/AbstractCommonAuditLogRequestConverter.java
  26. 6 4
      ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/query/converter/AbstractCommonSearchRequestConverter.java
  27. 20 19
      ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/query/converter/AbstractCommonServiceLogRequestConverter.java
  28. 47 0
      ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/query/converter/AbstractConverterAware.java
  29. 6 6
      ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/query/converter/AnyGraphRequestConverter.java
  30. 1 1
      ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/query/converter/AuditBarGraphRequestConverter.java
  31. 1 1
      ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/query/converter/AuditLogRequestConverter.java
  32. 4 3
      ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/query/converter/BaseServiceLogRequestConverter.java
  33. 1 1
      ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/query/converter/FieldAuditLogRequestConverter.java
  34. 2 2
      ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/query/converter/FieldBarGraphRequestConverter.java
  35. 3 3
      ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/query/converter/LogFileRequestConverter.java
  36. 4 4
      ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/query/converter/LogFileTailRequestConverter.java
  37. 6 6
      ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/query/converter/ServiceAnyGraphRequestConverter.java
  38. 1 2
      ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/query/converter/ServiceExtremeDatesRequestConverter.java
  39. 3 3
      ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/query/converter/ServiceGraphRequestConverter.java
  40. 4 5
      ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/query/converter/ServiceLogExportRequestConverter.java
  41. 2 2
      ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/query/converter/ServiceLogFileRequestConverter.java
  42. 7 7
      ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/query/converter/ServiceLogRequestConverter.java
  43. 5 5
      ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/query/converter/ServiceLogTruncatedRequestConverter.java
  44. 6 5
      ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/query/converter/SimpleQueryRequestConverter.java
  45. 4 6
      ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/query/converter/UserConfigRequestConverter.java
  46. 2 1
      ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/query/converter/UserExportRequestConverter.java
  47. 54 2
      ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/query/model/AnyGraphSearchCriteria.java
  48. 10 2
      ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/query/model/AuditBarGraphSearchCriteria.java
  49. 10 2
      ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/query/model/AuditLogSearchCriteria.java
  50. 44 49
      ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/query/model/CommonSearchCriteria.java
  51. 96 0
      ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/query/model/CommonServiceLogSearchCriteria.java
  52. 9 2
      ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/query/model/FieldAuditBarGraphSearchCriteria.java
  53. 9 2
      ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/query/model/FieldAuditLogSearchCriteria.java
  54. 28 1
      ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/query/model/LogFileSearchCriteria.java
  55. 10 3
      ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/query/model/LogFileTailSearchCriteria.java
  56. 25 35
      ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/query/model/SearchCriteria.java
  57. 36 1
      ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/query/model/ServiceAnyGraphSearchCriteria.java
  58. 9 2
      ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/query/model/ServiceExtremeDatesCriteria.java
  59. 9 2
      ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/query/model/ServiceGraphSearchCriteria.java
  60. 17 2
      ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/query/model/ServiceLogExportSearchCriteria.java
  61. 18 3
      ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/query/model/ServiceLogFileSearchCriteria.java
  62. 42 2
      ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/query/model/ServiceLogSearchCriteria.java
  63. 25 2
      ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/query/model/ServiceLogTruncatedSearchCriteria.java
  64. 25 2
      ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/query/model/UserConfigSearchCriteria.java
  65. 8 2
      ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/query/model/UserExportSearchCriteria.java
  66. 1 1
      ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/rest/AuditLogsResource.java
  67. 4 3
      ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/rest/ServiceLogsResource.java
  68. 0 134
      ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/solr/metrics/SolrJmxAdapter.java
  69. 0 198
      ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/solr/metrics/SolrMetricsLoader.java
  70. 3 3
      ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/solr/model/SolrAuditLogData.java
  71. 1 1
      ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/web/authenticate/LogsearchLogoutSuccessHandler.java
  72. 1 1
      ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/web/filters/LogsearchAuthenticationEntryPoint.java
  73. 1 0
      ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/web/filters/LogsearchKRBAuthenticationFilter.java
  74. 1 0
      ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/web/filters/LogsearchSecurityContextFormationFilter.java
  75. 2 0
      ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/web/filters/LogsearchUsernamePasswordAuthenticationFilter.java
  76. 0 10
      ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/web/security/LogsearchAbstractAuthenticationProvider.java
  77. 6 7
      ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/web/security/LogsearchAuthenticationProvider.java
  78. 1 11
      ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/web/security/LogsearchExternalServerAuthenticationProvider.java
  79. 5 6
      ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/web/security/LogsearchFileAuthenticationProvider.java
  80. 14 8
      ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/web/security/LogsearchLdapAuthenticationProvider.java
  81. 1 63
      ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/web/security/LogsearchLdapBindAuthenticator.java
  82. 7 6
      ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/web/security/LogsearchSimpleAuthenticationProvider.java
  83. 3 3
      ambari-logsearch/ambari-logsearch-portal/src/main/resources/log4j.xml
  84. 0 83
      ambari-logsearch/ambari-logsearch-portal/src/main/webapp/META-INF/security-applicationContext.xml
  85. 0 62
      ambari-logsearch/ambari-logsearch-portal/src/main/webapp/WEB-INF/web.xml
  86. 2 1
      ambari-logsearch/docker/test-config/logfeeder/logfeeder.properties
  87. 172 0
      ambari-logsearch/docker/test-config/logfeeder/shipper-conf/input.config-hdfs.json
  88. 4 0
      ambari-logsearch/docker/test-logs/hdfs-audit/hdfs-audit.log

+ 5 - 0
ambari-logsearch/ambari-logsearch-it/pom.xml

@@ -82,6 +82,11 @@
       <artifactId>slf4j-log4j12</artifactId>
       <version>1.7.10</version>
     </dependency>
+    <dependency>
+      <groupId>com.flipkart.zjsonpatch</groupId>
+      <artifactId>zjsonpatch</artifactId>
+      <version>0.2.4</version>
+    </dependency>
   </dependencies>
 
   <build>

+ 95 - 0
ambari-logsearch/ambari-logsearch-it/src/test/java/org/apache/ambari/logsearch/steps/LogSearchApiSteps.java

@@ -0,0 +1,95 @@
+/*
+ * 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.logsearch.steps;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.flipkart.zjsonpatch.JsonDiff;
+import com.google.common.io.Resources;
+import org.apache.ambari.logsearch.domain.StoryDataRegistry;
+import org.glassfish.jersey.client.JerseyClient;
+import org.glassfish.jersey.client.JerseyClientBuilder;
+import org.glassfish.jersey.client.authentication.HttpAuthenticationFeature;
+import org.jbehave.core.annotations.Named;
+import org.jbehave.core.annotations.Then;
+import org.jbehave.core.annotations.When;
+import org.junit.Assert;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.ws.rs.client.Invocation;
+import javax.ws.rs.client.WebTarget;
+import javax.ws.rs.core.MediaType;
+import java.io.File;
+import java.io.IOException;
+import java.net.URISyntaxException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class LogSearchApiSteps {
+
+  private static Logger LOG = LoggerFactory.getLogger(LogSearchApiSteps.class);
+
+  private String response;
+
+  @When("LogSearch api query sent: <apiQuery>")
+  public void sendApiQuery(@Named("apiQuery") String apiQuery) {
+    JerseyClient jerseyClient = JerseyClientBuilder.createClient();
+    HttpAuthenticationFeature authFeature = HttpAuthenticationFeature.basicBuilder()
+      .credentials("admin", "admin")
+      .build();
+    jerseyClient.register(authFeature);
+
+    String logsearchUrl = String.format("http://%s:%d%s",
+      StoryDataRegistry.INSTANCE.getDockerHost(),
+      StoryDataRegistry.INSTANCE.getLogsearchPort(),
+      apiQuery);
+
+    LOG.info("Url: {}", logsearchUrl);
+
+    WebTarget target = jerseyClient.target(logsearchUrl);
+    Invocation.Builder invocationBuilder =  target.request(MediaType.APPLICATION_JSON_TYPE);
+    response = invocationBuilder.get().readEntity(String.class);
+  }
+
+
+  @Then("The api query result is <jsonResult>")
+  public void verifyRestApiCall(@Named("jsonResult") String jsonResult) throws IOException, URISyntaxException {
+    ObjectMapper mapper = new ObjectMapper();
+    Path jsonFilePath = new File(Resources.getResource("test-output/" + jsonResult).toURI()).toPath();
+    String jsonExpected = new String(Files.readAllBytes(jsonFilePath));
+
+    JsonNode expected = mapper.readTree(jsonExpected);
+    JsonNode result = mapper.readTree(response);
+    JsonNode patch = JsonDiff.asJson(expected, result);
+    List<Object> diffObjects = mapper.convertValue(patch, List.class);
+    assertDiffs(diffObjects, expected);
+
+  }
+
+  private void assertDiffs(List<Object> diffObjects, JsonNode expected) {
+    for (Object diffObj : diffObjects) {
+      String path = ((Map<String, String>) diffObj).get("path");
+      Assert.assertTrue(expected.at(path).isMissingNode());
+    }
+  }
+}

+ 6 - 7
ambari-logsearch/ambari-logsearch-it/src/test/java/org/apache/ambari/logsearch/steps/SolrSteps.java

@@ -22,25 +22,24 @@ import org.apache.ambari.logsearch.domain.StoryDataRegistry;
 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.HttpSolrClient;
 import org.apache.solr.client.solrj.response.QueryResponse;
 import org.apache.solr.common.SolrDocumentList;
-import org.jbehave.core.annotations.Given;
+import org.jbehave.core.annotations.Named;
 import org.jbehave.core.annotations.Then;
-import org.jbehave.core.annotations.When;
-import org.jbehave.core.model.Story;
 import org.junit.Assert;
 
 import java.io.IOException;
 
 public class SolrSteps {
 
-  @Then("the number of $component docs is: $docSize")
-  public void numberOfDocsForComponent(String component, int docSize) throws IOException, SolrServerException {
+  @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();
     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);
     SolrDocumentList list = queryResponse.getResults();
     Assert.assertEquals(docSize, list.size());

+ 4 - 14
ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/web/listeners/SpringEventListener.java → ambari-logsearch/ambari-logsearch-it/src/test/java/org/apache/ambari/logsearch/story/LogSearchApiQueryStory.java

@@ -6,9 +6,9 @@
  * 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
@@ -16,17 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.ambari.logsearch.web.listeners;
+package org.apache.ambari.logsearch.story;
 
-import org.apache.log4j.Logger;
-import org.springframework.context.ApplicationListener;
-import org.springframework.security.authentication.event.AbstractAuthenticationEvent;
-
-public class SpringEventListener implements ApplicationListener<AbstractAuthenticationEvent> {
-  private static final Logger logger = Logger.getLogger(SpringEventListener.class);
-
-  @Override
-  public void onApplicationEvent(AbstractAuthenticationEvent event) {
-    logger.trace(" Inside onApplicationEvent  SpringEventListener");
-  }
+public class LogSearchApiQueryStory extends LogSearchStory {
 }

+ 3 - 1
ambari-logsearch/ambari-logsearch-it/src/test/java/org/apache/ambari/logsearch/story/LogSearchStory.java

@@ -18,6 +18,7 @@
  */
 package org.apache.ambari.logsearch.story;
 
+import org.apache.ambari.logsearch.steps.LogSearchApiSteps;
 import org.apache.ambari.logsearch.steps.SolrSteps;
 import org.apache.ambari.logsearch.steps.LogSearchDockerSteps;
 import org.jbehave.core.configuration.Configuration;
@@ -47,7 +48,8 @@ abstract public class LogSearchStory extends JUnitStory {
   public InjectableStepsFactory stepsFactory() {
     return new InstanceStepsFactory(configuration(),
       new LogSearchDockerSteps(),
-      new SolrSteps());
+      new SolrSteps(),
+      new LogSearchApiSteps());
   }
 
   @Test

+ 17 - 0
ambari-logsearch/ambari-logsearch-it/src/test/resources/org/apache/ambari/logsearch/story/log_search_api_query_story.story

@@ -0,0 +1,17 @@
+Meta:
+
+Narrative:
+As a user
+I want to perform queries against Log Search api
+So that I can validate the json outputs
+
+Scenario: scenario description
+
+Given logsearch docker container
+When LogSearch api query sent: <apiQuery>
+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|

+ 9 - 7
ambari-logsearch/ambari-logsearch-it/src/test/resources/org/apache/ambari/logsearch/story/logfeeder_parsing_story.story

@@ -5,14 +5,16 @@ As a user
 I want to start logsearch/logfeeder/solr components in a docker container with test logs
 So that I can parse and store the logs into Solr
 
-Scenario: Logsearch logs are stored into Solr.
+Scenario: Number of logs for components
 
 Given logsearch docker container
 When logfeeder started (parse logs & send data to solr)
-Then the number of logsearch_app docs is: 1
+Then the number of <component> docs is: <docSize>
 
-Scenario: Zookeeper logs are stored into Solr.
-
-Given logsearch docker container
-When logfeeder started (parse logs & send data to solr)
-Then the number of zookeeper docs is: 3
+Examples:
+|component|docSize|
+|logsearch_app|1|
+|zookeeper|3|
+|hst_agent|4|
+|secure_log|11|
+|system_message|17|

+ 33 - 0
ambari-logsearch/ambari-logsearch-it/src/test/resources/test-output/service-log-level-counts-values.json

@@ -0,0 +1,33 @@
+{
+  "vNameValues": [
+    {
+      "name": "FATAL",
+      "value": "0"
+    },
+    {
+      "name": "ERROR",
+      "value": "0"
+    },
+    {
+      "name": "WARN",
+      "value": "3"
+    },
+    {
+      "name": "INFO",
+      "value": "4"
+    },
+    {
+      "name": "DEBUG",
+      "value": "1"
+    },
+    {
+      "name": "TRACE",
+      "value": "0"
+    },
+    {
+      "name": "UNKNOWN",
+      "value": "28"
+    }
+  ],
+  "listSize": 7
+}

+ 18 - 0
ambari-logsearch/ambari-logsearch-it/src/test/resources/test-output/service-log-schema.json

@@ -0,0 +1,18 @@
+{
+  "log_message": "Log Message",
+  "bundle_id": "Bundle Id",
+  "case_id": "Case Id",
+  "cluster": "Cluster",
+  "event_count": "Event Count",
+  "file": "File",
+  "host": "Host",
+  "id": "Id",
+  "ip": "IP",
+  "level": "Level",
+  "logfile_line_number": "Logfile Line Number",
+  "logger_name": "Logger Name",
+  "method": "method",
+  "path": "Path",
+  "text": "Text",
+  "type": "Type"
+}

+ 6 - 3
ambari-logsearch/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/output/OutputSolr.java

@@ -77,17 +77,17 @@ public class OutputSolr extends Output {
 
   private BlockingQueue<OutputData> outgoingBuffer = null;
   private List<SolrWorkerThread> workerThreadList = new ArrayList<>();
-  
+
   @Override
   protected String getStatMetricName() {
     return "output.solr.write_logs";
   }
-  
+
   @Override
   protected String getWriteBytesMetricName() {
     return "output.solr.write_bytes";
   }
-  
+
   @Override
   public void init() throws Exception {
     super.init();
@@ -263,6 +263,9 @@ public class OutputSolr extends Output {
   private void useActualDateIfNeeded(Map<String, Object> jsonObj) {
     if (skipLogtime) {
       jsonObj.put("logtime", DateUtil.getActualDateStr());
+      if (jsonObj.get("evtTime") != null) {
+        jsonObj.put("evtTime", DateUtil.getActualDateStr());
+      }
     }
   }
 

+ 6 - 0
ambari-logsearch/ambari-logsearch-portal/pom.xml

@@ -36,6 +36,7 @@
     <jersey.version>2.23.2</jersey.version>
     <jetty-version>9.2.11.v20150529</jetty-version>
     <swagger.version>1.5.8</swagger.version>
+    <spring-data-solr.version>2.0.2.RELEASE</spring-data-solr.version>
   </properties>
   <profiles>
     <!-- Dev Profile Start -->
@@ -751,5 +752,10 @@
       <artifactId>swagger-ui</artifactId>
       <version>2.1.0</version>
     </dependency>
+    <dependency>
+      <groupId>org.springframework.data</groupId>
+      <artifactId>spring-data-solr</artifactId>
+      <version>${spring-data-solr.version}</version>
+    </dependency>
   </dependencies>
 </project>

+ 31 - 7
ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/LogSearch.java

@@ -24,11 +24,11 @@ import java.net.ServerSocket;
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.net.URL;
+import java.util.EnumSet;
 
-import org.apache.ambari.logsearch.common.ConfigHelper;
 import org.apache.ambari.logsearch.common.ManageStartEndTime;
 import org.apache.ambari.logsearch.common.PropertiesHelper;
-import org.apache.ambari.logsearch.solr.metrics.SolrMetricsLoader;
+import org.apache.ambari.logsearch.conf.ApplicationConfig;
 import org.apache.commons.lang.StringUtils;
 import org.apache.log4j.Logger;
 import org.eclipse.jetty.server.Connector;
@@ -40,10 +40,18 @@ import org.eclipse.jetty.server.ServerConnector;
 import org.eclipse.jetty.server.SslConnectionFactory;
 import org.eclipse.jetty.server.handler.HandlerList;
 import org.eclipse.jetty.server.handler.ResourceHandler;
+import org.eclipse.jetty.servlet.FilterHolder;
 import org.eclipse.jetty.servlet.ServletContextHandler;
+import org.eclipse.jetty.servlet.ServletHolder;
 import org.eclipse.jetty.util.resource.Resource;
 import org.eclipse.jetty.util.ssl.SslContextFactory;
 import org.eclipse.jetty.webapp.WebAppContext;
+import org.springframework.web.context.ContextLoaderListener;
+import org.springframework.web.context.request.RequestContextListener;
+import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
+import org.springframework.web.filter.DelegatingFilterProxy;
+
+import javax.servlet.DispatcherType;
 
 public class LogSearch {
   private static final Logger logger = Logger.getLogger(LogSearch.class);
@@ -65,6 +73,7 @@ public class LogSearch {
   
   private static final String WEB_RESOURCE_FOLDER = "webapps/app";
   private static final String ROOT_CONTEXT = "/";
+  private static final Integer SESSION_TIMEOUT = 30;
 
  
   public static void main(String[] argv) {
@@ -75,7 +84,6 @@ public class LogSearch {
     } catch (Throwable e) {
       logger.error("Error running logsearch server", e);
     }
-    SolrMetricsLoader.startSolrMetricsLoaderTasks();
   }
   
   public void run(String[] argv) throws Exception {
@@ -150,6 +158,21 @@ public class LogSearch {
     context.setBaseResource(Resource.newResource(webResourceBase));
     context.setContextPath(ROOT_CONTEXT);
     context.setParentLoaderPriority(true);
+
+    // Configure Spring
+    context.addEventListener(new ContextLoaderListener());
+    context.addEventListener(new RequestContextListener());
+    context.addFilter(new FilterHolder(new DelegatingFilterProxy("springSecurityFilterChain")), "/*", EnumSet.allOf(DispatcherType.class));
+    context.setInitParameter("contextClass", AnnotationConfigWebApplicationContext.class.getName());
+    context.setInitParameter("contextConfigLocation", ApplicationConfig.class.getName());
+
+    // Configure Jersey
+    ServletHolder jerseyServlet = context.addServlet(org.glassfish.jersey.servlet.ServletContainer.class, "/api/v1/*");
+    jerseyServlet.setInitOrder(1);
+    jerseyServlet.setInitParameter("jersey.config.server.provider.packages","org.apache.ambari.logsearch.rest,io.swagger.jaxrs.listing");
+
+    context.getSessionHandler().getSessionManager().setMaxInactiveInterval(SESSION_TIMEOUT);
+
     return context;
   }
 
@@ -167,18 +190,19 @@ public class LogSearch {
   private URI findWebResourceBase() {
     URL fileCompleteUrl = Thread.currentThread().getContextClassLoader()
         .getResource(WEB_RESOURCE_FOLDER);
+    String errorMessage = "Web Resource Folder " + WEB_RESOURCE_FOLDER+ " not found in classpath";
     if (fileCompleteUrl != null) {
       try {
         return fileCompleteUrl.toURI().normalize();
       } catch (URISyntaxException e) {
-        logger.error("Web Resource Folder " + WEB_RESOURCE_FOLDER+ " not found in classpath", e);
+        logger.error(errorMessage, e);
         System.exit(1);
       }
-    }else{
-      logger.error("Web Resource Folder " + WEB_RESOURCE_FOLDER+ " not found in classpath");
+    } else {
+      logger.error(errorMessage);
       System.exit(1);
     }
-    return null;
+    throw new IllegalStateException(errorMessage);
   }
 
   private void checkPort(int port) {

+ 3 - 13
ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/common/ExternalServerClient.java

@@ -21,7 +21,6 @@ package org.apache.ambari.logsearch.common;
 import java.util.List;
 import java.util.Map;
 
-import javax.annotation.PostConstruct;
 import javax.inject.Inject;
 import javax.ws.rs.client.Invocation;
 import javax.ws.rs.client.WebTarget;
@@ -29,7 +28,6 @@ import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.MultivaluedMap;
 
 import org.apache.ambari.logsearch.conf.AuthConfig;
-import org.apache.ambari.logsearch.web.security.LogsearchAbstractAuthenticationProvider;
 import org.apache.commons.lang.StringUtils;
 import org.apache.log4j.Logger;
 import org.glassfish.jersey.client.JerseyClient;
@@ -55,23 +53,18 @@ public class ExternalServerClient {
   @Inject
   private AuthConfig authConfig;
 
-  private boolean enableLog = false;// default
-
   /**
    * Send GET request to an external server
    */
-  @SuppressWarnings({ "unchecked", "rawtypes" })
   public Object sendGETRequest(String url, Class klass, MultivaluedMap<String, String> queryParam,
                                String username, String password)
       throws Exception {
     url = authConfig.getExternalAuthHostUrl() + url;
     JerseyClient client = localJerseyClient.get();
-    HttpAuthenticationFeature authFeature = HttpAuthenticationFeature.basicBuilder().build();
-
+    HttpAuthenticationFeature authFeature = HttpAuthenticationFeature.basicBuilder()
+      .credentials(username, password)
+      .build();
     client.register(authFeature);
-    if (enableLog) {
-      client.register(LoggingFilter.class);
-    }
 
     WebTarget target = client.target(url);
     LOG.debug("URL: " + url);
@@ -80,9 +73,6 @@ public class ExternalServerClient {
       LOG.debug(
         String.format("Query parameter: name - %s  ; value - %s ;" + entry.getKey(), StringUtils.join(entry.getValue(),',')));
     }
-    target
-      .property(HttpAuthenticationFeature.HTTP_AUTHENTICATION_BASIC_USERNAME, username)
-      .property(HttpAuthenticationFeature.HTTP_AUTHENTICATION_BASIC_PASSWORD, password);
     Invocation.Builder invocationBuilder =  target.request(MediaType.APPLICATION_JSON_TYPE);
     try {
       return invocationBuilder.get().readEntity(klass);

+ 1 - 40
ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/conf/ApplicationConfig.java

@@ -18,38 +18,16 @@
  */
 package org.apache.ambari.logsearch.conf;
 
-import org.apache.ambari.logsearch.query.converter.AnyGraphRequestConverter;
-import org.apache.ambari.logsearch.query.converter.AuditBarGraphRequestConverter;
-import org.apache.ambari.logsearch.query.converter.AuditLogRequestConverter;
-import org.apache.ambari.logsearch.query.converter.BaseAuditLogRequestConverter;
-import org.apache.ambari.logsearch.query.converter.BaseServiceLogRequestConverter;
-import org.apache.ambari.logsearch.query.converter.FieldAuditLogRequestConverter;
-import org.apache.ambari.logsearch.query.converter.FieldBarGraphRequestConverter;
-import org.apache.ambari.logsearch.query.converter.ServiceAnyGraphRequestConverter;
-import org.apache.ambari.logsearch.query.converter.ServiceExtremeDatesRequestConverter;
-import org.apache.ambari.logsearch.query.converter.ServiceGraphRequestConverter;
-import org.apache.ambari.logsearch.query.converter.ServiceLogExportRequestConverter;
-import org.apache.ambari.logsearch.query.converter.ServiceLogFileRequestConverter;
-import org.apache.ambari.logsearch.query.converter.ServiceLogRequestConverter;
-import org.apache.ambari.logsearch.query.converter.ServiceLogTruncatedRequestConverter;
-import org.apache.ambari.logsearch.query.converter.SimpleQueryRequestConverter;
-import org.apache.ambari.logsearch.query.converter.UserExportRequestConverter;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.ComponentScan;
 import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.ImportResource;
 import org.springframework.context.annotation.PropertySource;
 import org.springframework.context.support.ConversionServiceFactoryBean;
 import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
-import org.springframework.core.convert.converter.Converter;
-
-import java.util.HashSet;
-import java.util.Set;
 
 @Configuration
 @ComponentScan("org.apache.ambari.logsearch")
 @PropertySource(value = {"classpath:default.properties", "classpath:logsearch.properties"})
-@ImportResource("META-INF/security-applicationContext.xml")
 public class ApplicationConfig {
 
   @Bean
@@ -60,24 +38,7 @@ public class ApplicationConfig {
   @Bean(name="conversionService")
   public ConversionServiceFactoryBean conversionServiceFactoryBean() {
     ConversionServiceFactoryBean conversionServiceFactoryBean = new ConversionServiceFactoryBean();
-    Set<Converter> converters = new HashSet<>();
-    converters.add(new AnyGraphRequestConverter());
-    converters.add(new AuditBarGraphRequestConverter());
-    converters.add(new AuditLogRequestConverter());
-    converters.add(new BaseAuditLogRequestConverter());
-    converters.add(new BaseServiceLogRequestConverter());
-    converters.add(new FieldAuditLogRequestConverter());
-    converters.add(new FieldBarGraphRequestConverter());
-    converters.add(new SimpleQueryRequestConverter());
-    converters.add(new UserExportRequestConverter());
-    converters.add(new ServiceAnyGraphRequestConverter());
-    converters.add(new ServiceExtremeDatesRequestConverter());
-    converters.add(new ServiceGraphRequestConverter());
-    converters.add(new ServiceLogExportRequestConverter());
-    converters.add(new ServiceLogFileRequestConverter());
-    converters.add(new ServiceLogRequestConverter());
-    converters.add(new ServiceLogTruncatedRequestConverter());
-    conversionServiceFactoryBean.setConverters(converters);
+    conversionServiceFactoryBean.afterPropertiesSet();
     return conversionServiceFactoryBean;
   }
 

+ 11 - 1
ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/conf/AuthConfig.java

@@ -30,9 +30,11 @@ public class AuthConfig {
   boolean authLdapEnabled;
   @Value("${logsearch.auth.simple.enable:false}")
   boolean authSimpleEnabled;
+  @Value("${logsearch.auth.external_auth.enable:false}")
+  boolean authExternalEnabled;
   @Value("${logsearch.auth.external_auth.host_url:'http://ip:port'}")
   private String externalAuthHostUrl;
-  @Value("${logsearch.auth.login_url:/api/v1/users/$USERNAME/privileges?fields=*}")
+  @Value("${logsearch.auth.external_auth.login_url:/api/v1/users/$USERNAME/privileges?fields=*}")
   private String externalAuthLoginUrl;
   @Value("${logsearch.login.credentials.file:user_pass.json}")
   private String credentialsFile;
@@ -84,4 +86,12 @@ public class AuthConfig {
   public void setExternalAuthLoginUrl(String externalAuthLoginUrl) {
     this.externalAuthLoginUrl = externalAuthLoginUrl;
   }
+
+  public boolean isAuthExternalEnabled() {
+    return authExternalEnabled;
+  }
+
+  public void setAuthExternalEnabled(boolean authExternalEnabled) {
+    this.authExternalEnabled = authExternalEnabled;
+  }
 }

+ 112 - 0
ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/conf/SecurityConfig.java

@@ -0,0 +1,112 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.ambari.logsearch.conf;
+
+import org.apache.ambari.logsearch.web.authenticate.LogsearchAuthFailureHandler;
+import org.apache.ambari.logsearch.web.authenticate.LogsearchAuthSuccessHandler;
+import org.apache.ambari.logsearch.web.authenticate.LogsearchLogoutSuccessHandler;
+import org.apache.ambari.logsearch.web.filters.LogsearchAuthenticationEntryPoint;
+import org.apache.ambari.logsearch.web.filters.LogsearchKRBAuthenticationFilter;
+import org.apache.ambari.logsearch.web.filters.LogsearchSecurityContextFormationFilter;
+import org.apache.ambari.logsearch.web.filters.LogsearchUsernamePasswordAuthenticationFilter;
+import org.apache.ambari.logsearch.web.security.LogsearchAuthenticationProvider;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.security.config.annotation.web.builders.HttpSecurity;
+import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
+import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
+import org.springframework.security.config.http.SessionCreationPolicy;
+import org.springframework.security.web.access.intercept.FilterSecurityInterceptor;
+import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
+
+@Configuration
+@EnableWebSecurity
+public class SecurityConfig extends WebSecurityConfigurerAdapter {
+
+  @Override
+  protected void configure(HttpSecurity http) throws Exception {
+    http
+      .csrf().disable()
+      .sessionManagement()
+         .sessionFixation()
+         .newSession()
+         .sessionCreationPolicy(SessionCreationPolicy.ALWAYS)
+      .and()
+      .authorizeRequests()
+        .antMatchers("/login.html").permitAll()
+        .antMatchers("/styles/**").permitAll()
+        .antMatchers("/fonts/**").permitAll()
+        .antMatchers("/fonts/**").permitAll()
+        .antMatchers("/scripts/**").permitAll()
+        .antMatchers("/libs/**").permitAll()
+        .antMatchers("/images/**").permitAll()
+        .antMatchers("/templates/**").permitAll()
+        .antMatchers("/favicon.ico").permitAll()
+        .antMatchers("/api/v1/public/**").permitAll()
+        .antMatchers("/api/v1/swagger.json").permitAll()
+        .antMatchers("/**").authenticated()
+      .and()
+      .authenticationProvider(logsearchAuthenticationProvider())
+        .formLogin()
+        .loginPage("/login.html")
+      .and()
+      .httpBasic()
+        .authenticationEntryPoint(logsearchAuthenticationEntryPoint())
+      .and()
+      .addFilterBefore(logsearchUsernamePasswordAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class)
+      .addFilterBefore(new LogsearchKRBAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class)
+      .addFilterAfter(securityContextFormationFilter(), FilterSecurityInterceptor.class)
+      .logout()
+        .logoutUrl("/logout.html")
+        .deleteCookies("JSESSIONID")
+        .logoutSuccessHandler(new LogsearchLogoutSuccessHandler());
+  }
+
+  @Bean
+  public LogsearchSecurityContextFormationFilter securityContextFormationFilter() {
+    return new LogsearchSecurityContextFormationFilter();
+  }
+
+  @Bean
+  public LogsearchKRBAuthenticationFilter logsearchKRBAuthenticationFilter() {
+    return new LogsearchKRBAuthenticationFilter();
+  }
+
+  @Bean
+  public LogsearchAuthenticationProvider logsearchAuthenticationProvider() {
+    return new LogsearchAuthenticationProvider();
+  }
+
+  @Bean
+  public LogsearchAuthenticationEntryPoint logsearchAuthenticationEntryPoint() {
+    LogsearchAuthenticationEntryPoint entryPoint = new LogsearchAuthenticationEntryPoint("/login.html");
+    entryPoint.setForceHttps(false);
+    return entryPoint;
+  }
+
+  @Bean
+  public LogsearchUsernamePasswordAuthenticationFilter logsearchUsernamePasswordAuthenticationFilter() throws Exception {
+    LogsearchUsernamePasswordAuthenticationFilter filter = new LogsearchUsernamePasswordAuthenticationFilter();
+    filter.setAuthenticationSuccessHandler(new LogsearchAuthSuccessHandler());
+    filter.setAuthenticationFailureHandler(new LogsearchAuthFailureHandler());
+    filter.setAuthenticationManager(authenticationManagerBean());
+    return filter;
+  }
+
+}

+ 0 - 1
ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/dao/SolrDaoBase.java

@@ -29,7 +29,6 @@ import java.util.List;
 import org.apache.ambari.logsearch.common.ConfigHelper;
 import org.apache.ambari.logsearch.common.LogSearchContext;
 import org.apache.ambari.logsearch.common.MessageEnums;
-import org.apache.ambari.logsearch.common.PropertiesHelper;
 import org.apache.ambari.logsearch.conf.SolrKerberosConfig;
 import org.apache.ambari.logsearch.conf.SolrUserConfig;
 import org.apache.ambari.logsearch.manager.ManagerBase.LogType;

+ 1 - 12
ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/dao/UserDao.java

@@ -51,9 +51,6 @@ public class UserDao {
   private static final String ENC_PASSWORD = "en_password";
   private static final String NAME = "name";
 
-  @Inject
-  private LogsearchFileAuthenticationProvider fileAuthenticationProvider;
-
   @Inject
   private AuthConfig authConfig;
 
@@ -62,7 +59,7 @@ public class UserDao {
   @SuppressWarnings("unchecked")
   @PostConstruct
   public void initialization() {
-    if (fileAuthenticationProvider.isEnable()) {
+    if (authConfig.isAuthFileEnabled()) {
       try {
         String userPassJsonFileName = authConfig.getCredentialsFile();
         logger.info("USER PASS JSON  file NAME:" + userPassJsonFileName);
@@ -151,12 +148,4 @@ public class UserDao {
     }
     return isUpdated;
   }
-  
-  public String encryptPassword(String username, String password) {
-    if (!StringUtils.isEmpty(username)) {
-      username = username.toLowerCase();
-    }
-    String saltEncodedpasswd = CommonUtil.encryptPassword(password, username);
-    return saltEncodedpasswd;
-  }
 }

+ 25 - 19
ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/manager/AuditLogsManager.java

@@ -49,6 +49,12 @@ import org.apache.ambari.logsearch.model.response.LogData;
 import org.apache.ambari.logsearch.model.response.LogSearchResponse;
 import org.apache.ambari.logsearch.model.response.NameValueData;
 import org.apache.ambari.logsearch.model.response.NameValueDataListResponse;
+import org.apache.ambari.logsearch.query.model.AnyGraphSearchCriteria;
+import org.apache.ambari.logsearch.query.model.AuditBarGraphSearchCriteria;
+import org.apache.ambari.logsearch.query.model.CommonSearchCriteria;
+import org.apache.ambari.logsearch.query.model.FieldAuditBarGraphSearchCriteria;
+import org.apache.ambari.logsearch.query.model.FieldAuditLogSearchCriteria;
+import org.apache.ambari.logsearch.query.model.UserExportSearchCriteria;
 import org.apache.ambari.logsearch.solr.model.SolrAuditLogData;
 import org.apache.ambari.logsearch.solr.model.SolrComponentTypeLogData;
 import org.apache.ambari.logsearch.util.BizUtil;
@@ -82,7 +88,7 @@ public class AuditLogsManager extends ManagerBase<SolrAuditLogData, AuditLogResp
   private SolrAuditLogConfig solrAuditLogConfig;
 
   public AuditLogResponse getLogs(AuditLogSearchCriteria searchCriteria) {
-    Boolean isLastPage = (Boolean) searchCriteria.getParamValue("isLastPage");
+    Boolean isLastPage = searchCriteria.isLastPage();
     if (isLastPage) {
       SolrQuery lastPageQuery = queryGenerator.commonAuditFilterQuery(searchCriteria);
       LogSearchResponse logResponse = getLastPage(searchCriteria, LogSearchConstants.AUDIT_EVTTIME, auditSolrDao, lastPageQuery);
@@ -95,7 +101,7 @@ public class AuditLogsManager extends ManagerBase<SolrAuditLogData, AuditLogResp
     return getLogAsPaginationProvided(solrQuery, auditSolrDao);
   }
 
-  private List<LogData> getComponents(SearchCriteria searchCriteria) {
+  private List<LogData> getComponents(CommonSearchCriteria searchCriteria) {
     SolrQuery solrQuery = queryGenerator.commonAuditFilterQuery(searchCriteria);
     List<LogData> docList = new ArrayList<>();
     try {
@@ -133,7 +139,7 @@ public class AuditLogsManager extends ManagerBase<SolrAuditLogData, AuditLogResp
     }
   }
 
-  public GroupListResponse getAuditComponents(SearchCriteria searchCriteria) {
+  public GroupListResponse getAuditComponents(CommonSearchCriteria searchCriteria) {
     GroupListResponse componentResponse = new GroupListResponse();
     List<LogData> docList = getComponents(searchCriteria);
     componentResponse.setGroupList(docList);
@@ -141,13 +147,13 @@ public class AuditLogsManager extends ManagerBase<SolrAuditLogData, AuditLogResp
   }
 
   @SuppressWarnings("unchecked")
-  public BarGraphDataListResponse getAuditBarGraphData(SearchCriteria searchCriteria) {
+  public BarGraphDataListResponse getAuditBarGraphData(AuditBarGraphSearchCriteria searchCriteria) {
     BarGraphDataListResponse dataList = new BarGraphDataListResponse();
     SolrQuery solrQuery = queryGenerator.commonAuditFilterQuery(searchCriteria);
 
-    String from = getFrom((String) searchCriteria.getParamValue("startTime"));
-    String to = getTo((String) searchCriteria.getParamValue("endTime"));
-    String unit = getUnit((String) searchCriteria.getParamValue("unit"));
+    String from = getFrom(searchCriteria.getStartTime());
+    String to = getTo(searchCriteria.getEndTime());
+    String unit = getUnit(searchCriteria.getUnit());
 
     List<BarGraphData> histogramData = new ArrayList<BarGraphData>();
     String jsonHistogramQuery = queryGenerator.buildJSONFacetTermTimeRangeQuery(LogSearchConstants.AUDIT_COMPONENT,
@@ -225,7 +231,7 @@ public class AuditLogsManager extends ManagerBase<SolrAuditLogData, AuditLogResp
     }
   }
 
-  public BarGraphDataListResponse topTenUsers(SearchCriteria searchCriteria) {
+  public BarGraphDataListResponse topTenUsers(FieldAuditBarGraphSearchCriteria searchCriteria) {
 
     String jsonUserQuery =
       "{Users:{type:terms, field:reqUser, facet:{ Repo:{ type:terms, field:repo, facet:{eventCount:\"sum(event_count)\"}}}}}";
@@ -262,7 +268,7 @@ public class AuditLogsManager extends ManagerBase<SolrAuditLogData, AuditLogResp
     }
   }
 
-  public BarGraphDataListResponse topTenResources(SearchCriteria searchCriteria) {
+  public BarGraphDataListResponse topTenResources(FieldAuditLogSearchCriteria searchCriteria) {
 
     String jsonUserQuery =
       "{Users:{type:terms,field:resource,facet:{Repo:{type:terms,field:repo,facet:{eventCount:\"sum(event_count)\"}}}}}";
@@ -294,11 +300,11 @@ public class AuditLogsManager extends ManagerBase<SolrAuditLogData, AuditLogResp
   }
 
   @SuppressWarnings("unchecked")
-  public BarGraphDataListResponse getRequestUserLineGraph(SearchCriteria searchCriteria) {
+  public BarGraphDataListResponse getRequestUserLineGraph(FieldAuditBarGraphSearchCriteria searchCriteria) {
 
-    String from = getFrom((String) searchCriteria.getParamValue("startTime"));
-    String to = getTo((String) searchCriteria.getParamValue("endTime"));
-    String unit = getUnit((String) searchCriteria.getParamValue("unit"));
+    String from = getFrom(searchCriteria.getStartTime());
+    String to = getTo(searchCriteria.getEndTime());
+    String unit = getUnit(searchCriteria.getUnit());
 
     SolrQuery solrQuery = queryGenerator.commonAuditFilterQuery(searchCriteria);
 
@@ -355,7 +361,7 @@ public class AuditLogsManager extends ManagerBase<SolrAuditLogData, AuditLogResp
 
   }
 
-  public BarGraphDataListResponse getAnyGraphData(SearchCriteria searchCriteria) {
+  public BarGraphDataListResponse getAnyGraphData(AnyGraphSearchCriteria searchCriteria) {
     searchCriteria.addParam("fieldTime", LogSearchConstants.AUDIT_EVTTIME);
     SolrQuery solrQuery = queryGenerator.commonAuditFilterQuery(searchCriteria);
     BarGraphDataListResponse result = graphDataGenerator.getAnyGraphData(searchCriteria, auditSolrDao, solrQuery);
@@ -396,13 +402,13 @@ public class AuditLogsManager extends ManagerBase<SolrAuditLogData, AuditLogResp
   }
 
   @SuppressWarnings({"unchecked"})
-  public Response exportUserTableToTextFile(SearchCriteria searchCriteria) {
+  public Response exportUserTableToTextFile(UserExportSearchCriteria searchCriteria) {
     String jsonUserQuery =
       "{ Users: { type: terms, field: reqUser, facet:  {Repo: {  type: terms, field: repo, facet: {  eventCount: \"sum(event_count)\"}}}},x:{ type: terms,field: resource, facet: {y: {  type: terms, field: repo,facet: {  eventCount: \"sum(event_count)\"}}}}}";
 
     SolrQuery solrQuery = queryGenerator.commonAuditFilterQuery(searchCriteria);
-    String startTime = (String) searchCriteria.getParamValue("startTime");
-    String endTime = (String) searchCriteria.getParamValue("endTime");
+    String startTime = searchCriteria.getStartTime();
+    String endTime = searchCriteria.getEndTime();
 
     startTime = startTime == null ? "" : startTime;
     endTime = endTime == null ? "" : "_" + endTime;
@@ -410,7 +416,7 @@ public class AuditLogsManager extends ManagerBase<SolrAuditLogData, AuditLogResp
     SolrUtil.setJSONFacet(solrQuery, jsonUserQuery);
     SolrUtil.setRowCount(solrQuery, 0);
 
-    String dataFormat = (String) searchCriteria.getParamValue("format");
+    String dataFormat = searchCriteria.getFormat();
     FileOutputStream fis = null;
     try {
       QueryResponse queryResponse = auditSolrDao.process(solrQuery);
@@ -543,7 +549,7 @@ public class AuditLogsManager extends ManagerBase<SolrAuditLogData, AuditLogResp
     return fieldWithBlank;
   }
 
-  public BarGraphDataListResponse getServiceLoad(SearchCriteria searchCriteria) {
+  public BarGraphDataListResponse getServiceLoad(CommonSearchCriteria searchCriteria) {
     BarGraphDataListResponse dataList = new BarGraphDataListResponse();
     Collection<BarGraphData> vaDatas = new ArrayList<BarGraphData>();
     dataList.setGraphData(vaDatas);

+ 3 - 3
ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/manager/PublicManager.java

@@ -22,9 +22,9 @@ package org.apache.ambari.logsearch.manager;
 import java.util.ArrayList;
 import java.util.List;
 
+import org.apache.ambari.logsearch.conf.AuthConfig;
 import org.apache.ambari.logsearch.model.response.NameValueData;
 import org.apache.ambari.logsearch.model.response.NameValueDataListResponse;
-import org.apache.ambari.logsearch.web.security.LogsearchSimpleAuthenticationProvider;
 import org.springframework.stereotype.Component;
 
 import javax.inject.Inject;
@@ -33,14 +33,14 @@ import javax.inject.Inject;
 public class PublicManager extends JsonManagerBase {
 
   @Inject
-  private LogsearchSimpleAuthenticationProvider simpleAuthenticationProvider;
+  private AuthConfig authConfig;
 
   public String getGeneralConfig() {
     NameValueDataListResponse nameValueList = new NameValueDataListResponse();
     List<NameValueData> nameValues = new ArrayList<>();
     NameValueData nameValue = new NameValueData();
     nameValue.setName("simpleAuth");
-    nameValue.setValue("" + simpleAuthenticationProvider.isEnable());
+    nameValue.setValue("" + authConfig.isAuthSimpleEnabled());
     nameValues.add(nameValue);
     nameValueList.setvNameValues(nameValues);
     return convertObjToString(nameValueList);

+ 40 - 102
ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/manager/ServiceLogsManager.java

@@ -43,7 +43,6 @@ import javax.ws.rs.core.Response;
 import org.apache.ambari.logsearch.common.ConfigHelper;
 import org.apache.ambari.logsearch.common.LogSearchConstants;
 import org.apache.ambari.logsearch.common.MessageEnums;
-import org.apache.ambari.logsearch.common.PropertiesHelper;
 import org.apache.ambari.logsearch.conf.SolrServiceLogConfig;
 import org.apache.ambari.logsearch.dao.ServiceLogsSolrDao;
 import org.apache.ambari.logsearch.graph.GraphDataGenerator;
@@ -64,6 +63,13 @@ import org.apache.ambari.logsearch.model.response.NodeListResponse;
 import org.apache.ambari.logsearch.model.response.ServiceLogData;
 import org.apache.ambari.logsearch.model.response.ServiceLogResponse;
 import org.apache.ambari.logsearch.query.QueryGenerationBase;
+import org.apache.ambari.logsearch.query.model.CommonServiceLogSearchCriteria;
+import org.apache.ambari.logsearch.query.model.ServiceAnyGraphSearchCriteria;
+import org.apache.ambari.logsearch.query.model.ServiceGraphSearchCriteria;
+import org.apache.ambari.logsearch.query.model.ServiceLogExportSearchCriteria;
+import org.apache.ambari.logsearch.query.model.ServiceLogFileSearchCriteria;
+import org.apache.ambari.logsearch.query.model.ServiceLogSearchCriteria;
+import org.apache.ambari.logsearch.query.model.ServiceLogTruncatedSearchCriteria;
 import org.apache.ambari.logsearch.solr.model.SolrComponentTypeLogData;
 import org.apache.ambari.logsearch.solr.model.SolrHostLogData;
 import org.apache.ambari.logsearch.solr.model.SolrServiceLogData;
@@ -83,7 +89,6 @@ import org.apache.solr.client.solrj.response.FacetField;
 import org.apache.solr.client.solrj.response.FacetField.Count;
 import org.apache.solr.client.solrj.response.PivotField;
 import org.apache.solr.client.solrj.response.QueryResponse;
-import org.apache.solr.client.solrj.response.RangeFacet;
 import org.apache.solr.common.SolrDocument;
 import org.apache.solr.common.SolrDocumentList;
 import org.apache.solr.common.SolrException;
@@ -114,10 +119,10 @@ public class ServiceLogsManager extends ManagerBase<SolrServiceLogData, ServiceL
   @Inject
   private SolrServiceLogConfig solrServiceLogConfig;
 
-  public ServiceLogResponse searchLogs(SearchCriteria searchCriteria) {
-    String keyword = (String) searchCriteria.getParamValue("keyword");
-    String logId = (String) searchCriteria.getParamValue("sourceLogId");
-    Boolean isLastPage = (Boolean) searchCriteria.getParamValue("isLastPage");
+  public ServiceLogResponse searchLogs(ServiceLogSearchCriteria searchCriteria) {
+    String keyword = searchCriteria.getKeyword();
+    String logId = searchCriteria.getSourceLogId();
+    Boolean isLastPage = searchCriteria.isLastPage();
 
     if (!StringUtils.isBlank(keyword)) {
       try {
@@ -203,7 +208,7 @@ public class ServiceLogsManager extends ManagerBase<SolrServiceLogData, ServiceL
     return getFields(LogSearchConstants.SOLR_COMPONENT, SolrComponentTypeLogData.class);
   }
 
-  public GraphDataListResponse getAggregatedInfo(SearchCriteria searchCriteria) {
+  public GraphDataListResponse getAggregatedInfo(CommonServiceLogSearchCriteria searchCriteria) {
     SolrQuery solrQuery = queryGenerator.commonServiceFilterQuery(searchCriteria);
     String hierarchy = "host,type,level";
     GraphDataListResponse graphInfo = new GraphDataListResponse();
@@ -401,7 +406,7 @@ public class ServiceLogsManager extends ManagerBase<SolrServiceLogData, ServiceL
     return extensionTree;
   }
 
-  public NodeListResponse getTreeExtension(SearchCriteria searchCriteria) {
+  public NodeListResponse getTreeExtension(ServiceLogFileSearchCriteria searchCriteria) {
     SolrQuery solrQuery = queryGenerator.commonServiceFilterQuery(searchCriteria);
     solrQuery.setParam("event", "/getTreeExtension");
 
@@ -464,7 +469,7 @@ public class ServiceLogsManager extends ManagerBase<SolrServiceLogData, ServiceL
     return list;
   }
 
-  public NodeListResponse getHostListByComponent(SearchCriteria searchCriteria) {
+  public NodeListResponse getHostListByComponent(ServiceLogFileSearchCriteria searchCriteria) {
     SolrQuery solrQuery = queryGenerator.commonServiceFilterQuery(searchCriteria);
     solrQuery.setParam("event", "/service/hosts/components");
 
@@ -524,7 +529,7 @@ public class ServiceLogsManager extends ManagerBase<SolrServiceLogData, ServiceL
     }
   }
 
-  public NameValueDataListResponse getLogsLevelCount(SearchCriteria sc) {
+  public NameValueDataListResponse getLogsLevelCount(ServiceLogFileSearchCriteria sc) {
     NameValueDataListResponse nameValueList = new NameValueDataListResponse();
     SolrQuery query = queryGenerator.commonServiceFilterQuery(sc);
     query.setParam("event", "/service/logs/levels/counts/namevalues");
@@ -584,11 +589,11 @@ public class ServiceLogsManager extends ManagerBase<SolrServiceLogData, ServiceL
     return list;
   }
 
-  public LogListResponse getPageByKeyword(SearchCriteria searchCriteria)
+  public LogListResponse getPageByKeyword(ServiceLogSearchCriteria searchCriteria)
     throws SolrServerException {
     String defaultChoice = "0";
 
-    String key = (String) searchCriteria.getParamValue("keyword");
+    String key = (String) searchCriteria.getKeyword();
     if(StringUtils.isBlank(key)){
       throw RESTErrorUtil.createRESTException("Keyword was not given",
           MessageEnums.DATA_NOT_FOUND);
@@ -603,7 +608,7 @@ public class ServiceLogsManager extends ManagerBase<SolrServiceLogData, ServiceL
     keyword = "*" + keyword + "*";
 
 
-    String keyType = (String) searchCriteria.getParamValue("keywordType");
+    String keyType = (String) searchCriteria.getKeywordType();
     QueryResponse queryResponse = null;
 
     if (!defaultChoice.equals(keyType)) {
@@ -689,9 +694,8 @@ public class ServiceLogsManager extends ManagerBase<SolrServiceLogData, ServiceL
         }
 
         // Keyword Sequence Number Calculation
-        String endTime = (String) searchCriteria.getParamValue("to");
-        String startTime = (String) searchCriteria
-          .getParamValue("from");
+        String endTime = searchCriteria.getTo();
+        String startTime = searchCriteria.getFrom();
         SolrQuery logTimeThroughRangeQuery = queryGenerator
           .commonServiceFilterQuery(searchCriteria);
         logTimeThroughRangeQuery.remove("start");
@@ -809,8 +813,7 @@ public class ServiceLogsManager extends ManagerBase<SolrServiceLogData, ServiceL
         rangeLogQuery.remove("rows");
         logIdQuery.setStart(start);
         logIdQuery.setRows(searchCriteria.getMaxRows());
-        LogListResponse logResponse = getLogAsPaginationProvided(logIdQuery, serviceLogsSolrDao);
-        return logResponse;
+        return getLogAsPaginationProvided(logIdQuery, serviceLogsSolrDao);
 
       } catch (Exception e) {
         //do nothing
@@ -899,9 +902,8 @@ public class ServiceLogsManager extends ManagerBase<SolrServiceLogData, ServiceL
 
 
         // Keyword LogTime Calculation
-        String endTime = (String) searchCriteria.getParamValue("to");
-        String startTime = (String) searchCriteria
-          .getParamValue("from");
+        String endTime = (String) searchCriteria.getTo();
+        String startTime = searchCriteria.getFrom();
         SolrQuery logTimeThroughRangeQuery = queryGenerator
           .commonServiceFilterQuery(searchCriteria);
         logTimeThroughRangeQuery.remove("start");
@@ -1034,7 +1036,7 @@ public class ServiceLogsManager extends ManagerBase<SolrServiceLogData, ServiceL
         MessageEnums.ERROR_SYSTEM);
   }
 
-  private LogSearchResponse getPageByLogId(SearchCriteria searchCriteria) {
+  private LogSearchResponse getPageByLogId(ServiceLogSearchCriteria searchCriteria) {
     LogSearchResponse logResponse = new ServiceLogResponse();
     String endLogTime = (String) searchCriteria.getParamValue("to");
     if(StringUtils.isBlank(endLogTime)){
@@ -1135,68 +1137,14 @@ public class ServiceLogsManager extends ManagerBase<SolrServiceLogData, ServiceL
   }
 
   @SuppressWarnings("unchecked")
-  public List<NameValueData> getHistogramCounts(SolrQuery solrQuery,
-                                             String from, String to, String unit) {
-    List<NameValueData> logsCounts = new ArrayList<>();
-    try {
-
-      SolrUtil.setFacetRange(solrQuery, LogSearchConstants.LOGTIME,
-        from, to, unit);
-
-      List<RangeFacet.Count> logLevelCounts = null;
-
-      QueryResponse response = serviceLogsSolrDao.process(solrQuery);
-      if(response == null){
-        return logsCounts;
-      }
-      @SuppressWarnings("rawtypes")
-      List<RangeFacet> rangeFacetList = response.getFacetRanges();
-      if (rangeFacetList == null) {
-        return logsCounts;
-
-      }
-
-      @SuppressWarnings("rawtypes")
-      RangeFacet rangeFacet=rangeFacetList.get(0);
-      if (rangeFacet == null) {
-        return logsCounts;
-      }
-      logLevelCounts = rangeFacet.getCounts();
-
-      if(logLevelCounts == null){
-        return logsCounts;
-      }
-      for (RangeFacet.Count logCount : logLevelCounts) {
-        NameValueData nameValue = new NameValueData();
-        nameValue.setName(logCount.getValue());
-        nameValue.setValue("" + logCount.getCount());
-        logsCounts.add(nameValue);
-      }
-    } catch (SolrException | SolrServerException | IOException e) {
-      logger.error("Error during solrQuery=" + solrQuery, e);
-    }
-    return logsCounts;
-  }
-
-  public List<Count> getFacetCountsByDate(SolrQuery solrQuery,
-                                          String facetField) throws SolrServerException, IOException,
-    SolrException {
-
-    QueryResponse response = serviceLogsSolrDao.process(solrQuery);
-
-    FacetField field = response.getFacetDate(facetField);
-    return field.getValues();
-  }
-
-  @SuppressWarnings("unchecked")
-  public BarGraphDataListResponse getHistogramData(SearchCriteria searchCriteria) {
+  public BarGraphDataListResponse getHistogramData(ServiceGraphSearchCriteria searchCriteria) {
     String deafalutValue = "0";
     BarGraphDataListResponse dataList = new BarGraphDataListResponse();
     SolrQuery solrQuery = queryGenerator.commonServiceFilterQuery(searchCriteria);
     solrQuery.set("event", "/audit/logs/histogram");
-    String from = getFrom((String) searchCriteria.getParamValue("from"));
-    String to = getTo((String) searchCriteria.getParamValue("to"));
-    String unit = getUnit((String) searchCriteria.getParamValue("unit"));
+    String from = getFrom(searchCriteria.getFrom());
+    String to = getTo(searchCriteria.getTo());
+    String unit = getUnit(searchCriteria.getUnit());
 
     List<BarGraphData> histogramData = new ArrayList<>();
 
@@ -1267,16 +1215,6 @@ public class ServiceLogsManager extends ManagerBase<SolrServiceLogData, ServiceL
     }
   }
 
-  public void arrangeLevel(String level,
-                           List<BarGraphData> histogramDataLocal,
-                           List<BarGraphData> histogramData) {
-    for (BarGraphData histData : histogramData) {
-      if (histData != null && level.equals(histData.getName())) {
-        histogramDataLocal.add(histData);
-      }
-    }
-  }
-
   public String cancelFindRequestByDate(String uniqueId) {
     if (StringUtils.isEmpty(uniqueId)) {
       logger.error("Unique id is Empty");
@@ -1305,13 +1243,13 @@ public class ServiceLogsManager extends ManagerBase<SolrServiceLogData, ServiceL
     return true;
   }
 
-  public Response exportToTextFile(SearchCriteria searchCriteria) {
+  public Response exportToTextFile(ServiceLogExportSearchCriteria searchCriteria) {
     String defaultFormat = "text";
     SolrQuery solrQuery = queryGenerator.commonServiceFilterQuery(searchCriteria);
-    String from = (String) searchCriteria.getParamValue("from");
-    String to = (String) searchCriteria.getParamValue("to");
-    String utcOffset = (String) searchCriteria.getParamValue("utcOffset");
-    String format = (String) searchCriteria.getParamValue("format");
+    String from = searchCriteria.getFrom();
+    String to = searchCriteria.getTo();
+    String utcOffset = searchCriteria.getUtcOffset();
+    String format = searchCriteria.getFormat();
 
     format = defaultFormat.equalsIgnoreCase(format) && format != null ? ".txt"
         : ".json";
@@ -1449,7 +1387,7 @@ public class ServiceLogsManager extends ManagerBase<SolrServiceLogData, ServiceL
     }
   }
 
-  public NodeListResponse getComponentListWithLevelCounts(SearchCriteria searchCriteria) {
+  public NodeListResponse getComponentListWithLevelCounts(ServiceLogFileSearchCriteria searchCriteria) {
     SolrQuery solrQuery = queryGenerator.commonServiceFilterQuery(searchCriteria);
     solrQuery.setParam("event", "/service/logs/components/levels/counts");
 
@@ -1670,7 +1608,7 @@ public class ServiceLogsManager extends ManagerBase<SolrServiceLogData, ServiceL
     }
   }
 
-  public BarGraphDataListResponse getAnyGraphData(SearchCriteria searchCriteria) {
+  public BarGraphDataListResponse getAnyGraphData(ServiceAnyGraphSearchCriteria searchCriteria) {
     searchCriteria.addParam("fieldTime", LogSearchConstants.LOGTIME);
     SolrQuery solrQuery = queryGenerator.commonServiceFilterQuery(searchCriteria);
     BarGraphDataListResponse result = graphDataGenerator.getAnyGraphData(searchCriteria, serviceLogsSolrDao, solrQuery);
@@ -1681,7 +1619,7 @@ public class ServiceLogsManager extends ManagerBase<SolrServiceLogData, ServiceL
 
   }
 
-  public ServiceLogResponse getAfterBeforeLogs(SearchCriteria searchCriteria) {
+  public ServiceLogResponse getAfterBeforeLogs(ServiceLogTruncatedSearchCriteria searchCriteria) {
     ServiceLogResponse logResponse = new ServiceLogResponse();
     List<SolrServiceLogData> docList = null;
     String id = (String) searchCriteria
@@ -1692,11 +1630,11 @@ public class ServiceLogsManager extends ManagerBase<SolrServiceLogData, ServiceL
     }
     String maxRows = "";
 
-    maxRows = (String) searchCriteria.getParamValue("numberRows");
+    maxRows = searchCriteria.getNumberRows();
     if (StringUtils.isBlank(maxRows)){
       maxRows = ""+maxRows;
     }
-    String scrollType = (String) searchCriteria.getParamValue("scrollType");
+    String scrollType = searchCriteria.getScrollType();
     if(StringUtils.isBlank(scrollType)){
       scrollType = "";
     }
@@ -1803,7 +1741,7 @@ public class ServiceLogsManager extends ManagerBase<SolrServiceLogData, ServiceL
     searchCriteria.addParam(LogSearchConstants.SORT, sortOrder);
     queryGenerator.setMultipleSortOrder(solrQuery, searchCriteria);
 
-    return (ServiceLogResponse) getLogAsPaginationProvided(solrQuery, serviceLogsSolrDao);
+    return getLogAsPaginationProvided(solrQuery, serviceLogsSolrDao);
   }
 
   private ServiceLogResponse whenScrollDown(SearchCriteria searchCriteria,
@@ -1835,7 +1773,7 @@ public class ServiceLogsManager extends ManagerBase<SolrServiceLogData, ServiceL
     searchCriteria.addParam(LogSearchConstants.SORT, sortOrder);
     queryGenerator.setMultipleSortOrder(solrQuery, searchCriteria);
 
-    return (ServiceLogResponse) getLogAsPaginationProvided(solrQuery, serviceLogsSolrDao);
+    return getLogAsPaginationProvided(solrQuery, serviceLogsSolrDao);
   }
 
   @Scheduled(cron = "${logsearch.solr.warming.cron}")

+ 2 - 2
ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/model/response/AuditLogData.java

@@ -98,9 +98,9 @@ public interface AuditLogData extends CommonLogData {
   void setRepo(String repo);
 
   @JsonProperty("repoType")
-  String getRepoType();
+  Integer getRepoType();
 
-  void setRepoType(String repoType);
+  void setRepoType(Integer repoType);
 
   @JsonProperty("reqData")
   String getRequestData();

+ 27 - 21
ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/query/QueryGeneration.java

@@ -30,6 +30,9 @@ import org.apache.ambari.logsearch.common.LogSearchConstants;
 import org.apache.ambari.logsearch.common.PropertiesHelper;
 import org.apache.ambari.logsearch.conf.SolrAuditLogConfig;
 import org.apache.ambari.logsearch.conf.SolrServiceLogConfig;
+import org.apache.ambari.logsearch.query.model.AuditLogSearchCriteria;
+import org.apache.ambari.logsearch.query.model.CommonSearchCriteria;
+import org.apache.ambari.logsearch.query.model.CommonServiceLogSearchCriteria;
 import org.apache.ambari.logsearch.query.model.SearchCriteria;
 import org.apache.ambari.logsearch.dao.SolrDaoBase;
 import org.apache.ambari.logsearch.manager.ManagerBase.LogType;
@@ -59,32 +62,33 @@ public class QueryGeneration extends QueryGenerationBase {
   @Inject
   private SolrAuditLogConfig solrAuditLogConfig;
 
-  public SolrQuery commonServiceFilterQuery(SearchCriteria searchCriteria) {
+  public SolrQuery commonServiceFilterQuery(CommonServiceLogSearchCriteria searchCriteria) {
     LogType logType = LogType.SERVICE;
     SolrQuery solrQuery = new SolrQuery();
-    String treeParams = (String) searchCriteria.getParamValue("treeParams");
-    String givenQuery = (String) searchCriteria.getParamValue("q");
-    String level = (String) searchCriteria.getParamValue("level");
-    String startTime = (String) searchCriteria.getParamValue("from");
-    String endTime = (String) searchCriteria.getParamValue("to");
-    String iMessage = (String) searchCriteria.getParamValue("iMessage");
-    String eMessage = (String) searchCriteria.getParamValue("eMessage");
+    String advQuery = (String) searchCriteria.getParamValue("advanceSearch"); // TODO: check these are used from the UI or not
     String gEmessage = (String) searchCriteria.getParamValue("gEMessage");
-    String selectedComp = (String) searchCriteria.getParamValue("selectComp");
-    String bundleId = (String) searchCriteria.getParamValue(LogSearchConstants.BUNDLE_ID);
     String globalExcludeComp = (String) searchCriteria.getParamValue("gMustNot");
     String unselectedComp = (String) searchCriteria.getParamValue("unselectComp");
-    String urlHostName = (String) searchCriteria.getParamValue("host_name");
-    String urlComponentName = (String) searchCriteria.getParamValue("component_name");
-    String file_name = (String) searchCriteria.getParamValue("file_name");
-    String advQuery = (String) searchCriteria.getParamValue("advanceSearch");
+
+    String treeParams = searchCriteria.getTreeParams();
+    String givenQuery = (String) searchCriteria.getParamValue("q");
+    String level = searchCriteria.getLevel();
+    String startTime = searchCriteria.getFrom();
+    String endTime = searchCriteria.getTo();
+    String iMessage = searchCriteria.getIncludeMessage();
+    String eMessage = searchCriteria.getExcludeMessage();
+    String selectedComp = searchCriteria.getSelectComp();
+    String bundleId = searchCriteria.getBundleId();
+    String urlHostName = searchCriteria.getHostName();
+    String urlComponentName = searchCriteria.getComponentName();
+    String file_name = searchCriteria.getFileName();
     // build advance query
     if (!StringUtils.isBlank(advQuery)) {
       String advQueryParameters[] = advQuery.split(Pattern.quote("}{"));
       SolrQuery advSolrQuery = new SolrQuery();
       for (String queryParam : advQueryParameters) {
         String params[] = queryParam.split(Pattern.quote("="));
-        if (params != null && params.length > 1)
+        if (params.length > 1)
           advSolrQuery.setParam(params[0], params[1]);
       }
       setFilterClauseWithFieldName(advSolrQuery, level, LogSearchConstants.SOLR_LEVEL, "", Condition.OR);
@@ -226,18 +230,20 @@ public class QueryGeneration extends QueryGenerationBase {
     }
   }
 
-  public SolrQuery commonAuditFilterQuery(SearchCriteria searchCriteria) {
+  public SolrQuery commonAuditFilterQuery(CommonSearchCriteria searchCriteria) {
     LogType logType = LogType.AUDIT;
     SolrQuery solrQuery = new SolrQuery();
     solrQuery.setQuery("*:*");
-    String startTime = (String) searchCriteria.getParamValue("startTime");
-    String endTime = (String) searchCriteria.getParamValue("endTime");
-    String selectedComp = (String) searchCriteria.getParamValue("includeString");
+
+    String globalExcludeComp = (String) searchCriteria.getParamValue("gMustNot"); // TODO: check this are used from UI or not
+    String unselectedComp = (String) searchCriteria.getParamValue("unselectComp");
+
+    String startTime = searchCriteria.getStartTime();
+    String endTime = searchCriteria.getEndTime();
+    String selectedComp = searchCriteria.getMustBe();
     setFilterClauseWithFieldName(solrQuery, selectedComp, LogSearchConstants.AUDIT_COMPONENT, LogSearchConstants.NO_OPERATOR, Condition.OR);
-    String globalExcludeComp = (String) searchCriteria.getParamValue("gMustNot");
     setUserSpecificFilter(searchCriteria, solrQuery, LogSearchConstants.INCLUDE_QUERY, LogSearchConstants.INCLUDE_QUERY, logType);
     setUserSpecificFilter(searchCriteria, solrQuery, LogSearchConstants.EXCLUDE_QUERY, LogSearchConstants.EXCLUDE_QUERY, logType);
-    String unselectedComp = (String) searchCriteria.getParamValue("unselectComp");
     setFilterClauseWithFieldName(solrQuery, globalExcludeComp, LogSearchConstants.AUDIT_COMPONENT, LogSearchConstants.MINUS_OPERATOR, Condition.AND);
     setFilterClauseWithFieldName(solrQuery, unselectedComp, LogSearchConstants.AUDIT_COMPONENT, LogSearchConstants.MINUS_OPERATOR, Condition.AND);
     setSingleRangeFilter(solrQuery, LogSearchConstants.AUDIT_EVTTIME, startTime, endTime);

+ 78 - 0
ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/query/SearchCriteriaConstants.java

@@ -0,0 +1,78 @@
+/*
+ * 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.logsearch.query;
+
+public class SearchCriteriaConstants {
+
+  private SearchCriteriaConstants() {
+  }
+
+  public static final String PARAM_FIELD = "field";
+  public static final String PARAM_UNIT = "unit";
+  public static final String PARAM_INCLUDE_MESSAGE = "iMessage";
+  public static final String PARAM_EXCLUDE_MESSAGE = "eMessage";
+  public static final String PARAM_MUST_BE_STRING = "includeString";
+  public static final String PARAM_MUST_NOT_STRING = "unselectComp";
+  public static final String PARAM_EXCLUDE_QUERY = "excludeQuery";
+  public static final String PARAM_INCLUDE_QUERY = "includeQuery";
+  public static final String PARAM_START_TIME = "startTime";
+  public static final String PARAM_END_TIME = "endTime";
+
+  public static final String PARAM_IS_LAST_PAGE = "isLastPage";
+
+  public static final String PARAM_GLOBAL_START_TIME = "globalStartTime";
+  public static final String PARAM_GLOBAL_END_TIME = "globalEndTime";
+
+  public static final String PARAM_X_AXIS = "xAxis";
+  public static final String PARAM_Y_AXIS = "yAxis";
+  public static final String PARAM_STACK_BY = "stackBy";
+  public static final String PARAM_FROM = "from";
+  public static final String PARAM_TO = "to";
+
+  public static final String PARAM_LOG_FILE_COMPONENT = "component";
+  public static final String PARAM_LOG_FILE_HOST = "host";
+  public static final String PARAM_LOG_FILE_TYPE = "logType";
+  public static final String PARAM_LOG_TAIL_SIZE = "tailSize";
+
+  public static final String PARAM_COMPONENT_NAME = "component_name";
+  public static final String PARAM_HOST_NAME = "host_name";
+  public static final String PARAM_FILE_NAME = "file_name";
+  public static final String PARAM_BUNDLE_ID = "bundle_id";
+  public static final String PARAM_SELECT_COMP = "selectComp";
+  public static final String PARAM_LEVEL = "level";
+  public static final String PARAM_TREE_PARAMS = "treeParams";
+
+  public static final String PARAM_HOST_LOG_FILE = "hostLogFile";
+  public static final String PARAM_COMPONENT_LOG_FILE = "compLogFile";
+  public static final String PARAM_ID = "id";
+  public static final String PARAM_SCROLL_TYPE = "scrollType";
+  public static final String PARAM_NUMBER_ROWS = "numberRows";
+
+  public static final String PARAM_FORMAT = "format";
+  public static final String PARAM_UTC_OFFSET = "utcOffset";
+  public static final String PARAM_KEYWORD = "keyword";
+  public static final String PARAM_SOURCE_LOG_ID = "sourceLogId";
+  public static final String PARAM_KEYWORD_TYPE = "keywordType";
+  public static final String PARAM_TOKEN = "token";
+
+  public static final String PARAM_USER_NAME = "username";
+  public static final String PARAM_FILTER_NAME = "filtername";
+  public static final String PARAM_ROW_TYPE = "rowtype";
+
+}

+ 8 - 8
ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/query/converter/AbstractCommonAuditLogRequestConverter.java

@@ -32,15 +32,15 @@ public abstract class AbstractCommonAuditLogRequestConverter<SOURCE extends Base
     RESULT criteria = createCriteria(request);
     criteria.addParam("q", request.getQuery());
     criteria.addParam("columnQuery", StringEscapeUtils.unescapeXml(request.getColumnQuery()));
-    criteria.addParam("iMessage", StringEscapeUtils.unescapeXml(request.getiMessage()));
     criteria.addParam("gEMessage", StringEscapeUtils.unescapeXml(request.getgEMessage()));
-    criteria.addParam("eMessage", StringEscapeUtils.unescapeXml(request.getgEMessage()));
-    criteria.addParam("includeString", request.getMustBe());
-    criteria.addParam("unselectComp", request.getMustNot());
-    criteria.addParam("excludeQuery", StringEscapeUtils.unescapeXml(request.getExcludeQuery()));
-    criteria.addParam("includeQuery", StringEscapeUtils.unescapeXml(request.getIncludeQuery()));
-    criteria.addParam("startTime", request.getFrom());
-    criteria.addParam("endTime", request.getTo());
+    criteria.setIncludeMessage(StringEscapeUtils.unescapeXml(request.getiMessage()));
+    criteria.setExcludeMessage(StringEscapeUtils.unescapeXml(request.getgEMessage()));
+    criteria.setMustBe(request.getMustBe());
+    criteria.setMustNot(request.getMustNot());
+    criteria.setExcludeQuery(StringEscapeUtils.unescapeXml(request.getExcludeQuery()));
+    criteria.setIncludeQuery(StringEscapeUtils.unescapeXml(request.getIncludeQuery()));
+    criteria.setStartTime(request.getFrom());
+    criteria.setEndTime(request.getTo());
     return criteria;
   }
 

+ 6 - 4
ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/query/converter/AbstractCommonSearchRequestConverter.java

@@ -21,10 +21,12 @@ package org.apache.ambari.logsearch.query.converter;
 import org.apache.ambari.logsearch.model.request.impl.CommonSearchRequest;
 import org.apache.ambari.logsearch.query.model.CommonSearchCriteria;
 import org.apache.commons.lang.StringUtils;
-import org.springframework.core.convert.converter.Converter;
+
+import static org.apache.ambari.logsearch.query.SearchCriteriaConstants.PARAM_GLOBAL_END_TIME;
+import static org.apache.ambari.logsearch.query.SearchCriteriaConstants.PARAM_GLOBAL_START_TIME;
 
 public abstract class AbstractCommonSearchRequestConverter<SOURCE extends CommonSearchRequest, RESULT extends CommonSearchCriteria>
-  implements Converter<SOURCE, RESULT> {
+  extends AbstractConverterAware<SOURCE, RESULT> {
 
   @Override
   public RESULT convert(SOURCE source) {
@@ -43,11 +45,11 @@ public abstract class AbstractCommonSearchRequestConverter<SOURCE extends Common
     criteria.setSortType(request.getSortType());
     if (StringUtils.isNotEmpty(request.getStartTime())){
       criteria.setGlobalStartTime(request.getStartTime());
-      criteria.getUrlParamMap().put("globalStartTime", request.getStartTime());
+      criteria.getUrlParamMap().put(PARAM_GLOBAL_START_TIME, request.getStartTime());
     }
     if (StringUtils.isNotEmpty(request.getEndTime())){
       criteria.setGlobalEndTime(request.getEndTime());
-      criteria.getUrlParamMap().put("globalEndTime", request.getEndTime());
+      criteria.getUrlParamMap().put(PARAM_GLOBAL_END_TIME, request.getEndTime());
     }
   }
 }

+ 20 - 19
ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/query/converter/AbstractCommonServiceLogRequestConverter.java

@@ -18,37 +18,38 @@
  */
 package org.apache.ambari.logsearch.query.converter;
 
-import org.apache.ambari.logsearch.common.LogSearchConstants;
 import org.apache.ambari.logsearch.model.request.impl.BaseServiceLogRequest;
-import org.apache.ambari.logsearch.query.model.CommonSearchCriteria;
+import org.apache.ambari.logsearch.query.model.CommonServiceLogSearchCriteria;
 import org.apache.commons.lang.StringEscapeUtils;
 
-public abstract class AbstractCommonServiceLogRequestConverter<SOURCE extends BaseServiceLogRequest, RESULT extends CommonSearchCriteria>
+public abstract class AbstractCommonServiceLogRequestConverter<SOURCE extends BaseServiceLogRequest, RESULT extends CommonServiceLogSearchCriteria>
   extends AbstractCommonSearchRequestConverter<SOURCE, RESULT> {
 
   @Override
   public RESULT convertToSearchCriteria(SOURCE request) {
     RESULT criteria = createCriteria(request);
+    // TODO: check are these used from the UI or not?
     criteria.addParam("advanceSearch", StringEscapeUtils.unescapeXml(request.getAdvancedSearch()));
     criteria.addParam("q", request.getQuery());
-    criteria.addParam("treeParams", StringEscapeUtils.unescapeHtml(request.getTreeParams()));
-    criteria.addParam("level", request.getLevel());
     criteria.addParam("gMustNot", request.getgMustNot());
-    criteria.addParam("from", request.getFrom());
-    criteria.addParam("to", request.getTo());
-    criteria.addParam("selectComp", request.getMustBe());
-    criteria.addParam("unselectComp", request.getMustNot());
-    criteria.addParam("iMessage", StringEscapeUtils.unescapeXml(request.getiMessage()));
     criteria.addParam("gEMessage", StringEscapeUtils.unescapeXml(request.getgEMessage()));
-    criteria.addParam("eMessage", StringEscapeUtils.unescapeXml(request.getgEMessage()));
-    criteria.addParam(LogSearchConstants.BUNDLE_ID, request.getBundleId());
-    criteria.addParam("host_name", request.getHostName());
-    criteria.addParam("component_name", request.getComponentName());
-    criteria.addParam("file_name", request.getFileName());
-    criteria.addParam("startDate", request.getStartTime());
-    criteria.addParam("endDate", request.getEndTime());
-    criteria.addParam("excludeQuery", StringEscapeUtils.unescapeXml(request.getExcludeQuery()));
-    criteria.addParam("includeQuery", StringEscapeUtils.unescapeXml(request.getIncludeQuery()));
+    criteria.addParam("unselectComp", request.getMustNot());
+
+    criteria.setTreeParams(StringEscapeUtils.unescapeHtml(request.getTreeParams()));
+    criteria.setLevel(request.getLevel());
+    criteria.setFrom(request.getFrom());
+    criteria.setTo(request.getTo());
+    criteria.setSelectComp(request.getMustBe());
+    criteria.setBundleId(request.getBundleId());
+    criteria.setHostName(request.getHostName());
+    criteria.setComponentName(request.getComponentName());
+    criteria.setFileName(request.getFileName());
+    criteria.setIncludeMessage(StringEscapeUtils.unescapeXml(request.getiMessage()));
+    criteria.setExcludeMessage(StringEscapeUtils.unescapeXml(request.getgEMessage()));
+    criteria.setStartTime(request.getStartTime());
+    criteria.setEndTime(request.getEndTime());
+    criteria.setExcludeQuery(StringEscapeUtils.unescapeXml(request.getExcludeQuery()));
+    criteria.setIncludeQuery(StringEscapeUtils.unescapeXml(request.getIncludeQuery()));
     return criteria;
   }
 

+ 47 - 0
ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/query/converter/AbstractConverterAware.java

@@ -0,0 +1,47 @@
+/*
+ * 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.logsearch.query.converter;
+
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.core.convert.ConversionService;
+import org.springframework.core.convert.converter.Converter;
+import org.springframework.core.convert.converter.ConverterRegistry;
+
+import javax.annotation.PostConstruct;
+import javax.inject.Inject;
+
+public abstract class AbstractConverterAware<SOURCE, RESULT> implements Converter<SOURCE, RESULT> {
+
+  @Inject
+  @Qualifier("conversionService")
+  private ConversionService conversionService;
+
+  public ConversionService getConversionService() {
+    return conversionService;
+  }
+
+  @PostConstruct
+  private void register() {
+    if (conversionService instanceof ConverterRegistry) {
+      ((ConverterRegistry) conversionService).addConverter(this);
+    } else {
+      throw new IllegalStateException("Can't register Converter to ConverterRegistry");
+    }
+  }
+}

+ 6 - 6
ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/query/converter/AnyGraphRequestConverter.java

@@ -28,12 +28,12 @@ public class AnyGraphRequestConverter extends AbstractCommonSearchRequestConvert
   @Override
   public AnyGraphSearchCriteria convertToSearchCriteria(AnyGraphRequest anyGraphRequest) {
     AnyGraphSearchCriteria criteria = new AnyGraphSearchCriteria();
-    criteria.addParam("xAxis", anyGraphRequest.getxAxis());
-    criteria.addParam("yAxis", anyGraphRequest.getyAxis());
-    criteria.addParam("stackBy", anyGraphRequest.getStackBy());
-    criteria.addParam("unit", anyGraphRequest.getUnit());
-    criteria.addParam("from", anyGraphRequest.getFrom());
-    criteria.addParam("to", anyGraphRequest.getTo());
+    criteria.setxAxis(anyGraphRequest.getxAxis());
+    criteria.setyAxis(anyGraphRequest.getyAxis());
+    criteria.setStackBy(anyGraphRequest.getStackBy());
+    criteria.setUnit(anyGraphRequest.getUnit());
+    criteria.setFrom(anyGraphRequest.getFrom());
+    criteria.setTo(anyGraphRequest.getTo());
     return criteria;
   }
 }

+ 1 - 1
ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/query/converter/AuditBarGraphRequestConverter.java

@@ -28,7 +28,7 @@ public class AuditBarGraphRequestConverter extends AbstractCommonAuditLogRequest
   @Override
   public AuditBarGraphSearchCriteria createCriteria(AuditBarGraphRequest request) {
     AuditBarGraphSearchCriteria criteria = new AuditBarGraphSearchCriteria();
-    criteria.addParam("unit", request.getUnit());
+    criteria.setUnit(request.getUnit());
     return criteria;
   }
 }

+ 1 - 1
ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/query/converter/AuditLogRequestConverter.java

@@ -28,7 +28,7 @@ public class AuditLogRequestConverter extends AbstractCommonAuditLogRequestConve
   @Override
   public AuditLogSearchCriteria createCriteria(AuditLogRequest request) {
     AuditLogSearchCriteria criteria = new AuditLogSearchCriteria();
-    criteria.addParam("isLastPage", request.isLastPage());
+    criteria.setLastPage(request.isLastPage());
     return criteria;
   }
 }

+ 4 - 3
ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/query/converter/BaseServiceLogRequestConverter.java

@@ -20,13 +20,14 @@ package org.apache.ambari.logsearch.query.converter;
 
 import org.apache.ambari.logsearch.model.request.impl.BaseServiceLogRequest;
 import org.apache.ambari.logsearch.query.model.CommonSearchCriteria;
+import org.apache.ambari.logsearch.query.model.CommonServiceLogSearchCriteria;
 import org.springframework.stereotype.Component;
 
 @Component
-public class BaseServiceLogRequestConverter extends AbstractCommonServiceLogRequestConverter<BaseServiceLogRequest, CommonSearchCriteria> {
+public class BaseServiceLogRequestConverter extends AbstractCommonServiceLogRequestConverter<BaseServiceLogRequest, CommonServiceLogSearchCriteria> {
 
   @Override
-  public CommonSearchCriteria createCriteria(BaseServiceLogRequest request) {
-    return new CommonSearchCriteria();
+  public CommonServiceLogSearchCriteria createCriteria(BaseServiceLogRequest request) {
+    return new CommonServiceLogSearchCriteria();
   }
 }

+ 1 - 1
ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/query/converter/FieldAuditLogRequestConverter.java

@@ -28,7 +28,7 @@ public class FieldAuditLogRequestConverter extends AbstractCommonAuditLogRequest
   @Override
   public FieldAuditLogSearchCriteria createCriteria(FieldAuditLogRequest request) {
     FieldAuditLogSearchCriteria criteria = new FieldAuditLogSearchCriteria();
-    criteria.addParam("field", request.getField());
+    criteria.setField(request.getField());
     return criteria;
   }
 }

+ 2 - 2
ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/query/converter/FieldBarGraphRequestConverter.java

@@ -28,8 +28,8 @@ public class FieldBarGraphRequestConverter extends AbstractCommonAuditLogRequest
   @Override
   public FieldAuditBarGraphSearchCriteria createCriteria(FieldAuditBarGraphRequest request) {
     FieldAuditBarGraphSearchCriteria criteria = new FieldAuditBarGraphSearchCriteria();
-    criteria.addParam("unit", request.getUnit());
-    criteria.addParam("field", request.getField());
+    criteria.setUnit(request.getUnit());
+    criteria.setField(request.getField());
     return criteria;
   }
 }

+ 3 - 3
ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/query/converter/LogFileRequestConverter.java

@@ -29,9 +29,9 @@ public class LogFileRequestConverter implements Converter<LogFileRequest, LogFil
   @Override
   public LogFileSearchCriteria convert(LogFileRequest request) {
     LogFileSearchCriteria criteria = new LogFileSearchCriteria();
-    criteria.addParam("component", request.getComponent());
-    criteria.addParam("host", request.getHost());
-    criteria.addParam("logType", request.getLogType());
+    criteria.setLogFileComponent(request.getComponent());
+    criteria.setLogFileHost(request.getHost());
+    criteria.setLogType(request.getLogType());
     return criteria;
   }
 }

+ 4 - 4
ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/query/converter/LogFileTailRequestConverter.java

@@ -29,10 +29,10 @@ public class LogFileTailRequestConverter implements Converter<LogFileTailRequest
   @Override
   public LogFileTailSearchCriteria convert(LogFileTailRequest request) {
     LogFileTailSearchCriteria criteria = new LogFileTailSearchCriteria();
-    criteria.addParam("component", request.getComponent());
-    criteria.addParam("host", request.getHost());
-    criteria.addParam("logType", request.getLogType());
-    criteria.addParam("tailSize", request.getTailSize());
+    criteria.setLogFileComponent(request.getComponent());
+    criteria.setLogFileHost(request.getHost());
+    criteria.setLogType(request.getLogType());
+    criteria.setLogTailSize(request.getTailSize());
     return criteria;
   }
 }

+ 6 - 6
ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/query/converter/ServiceAnyGraphRequestConverter.java

@@ -28,12 +28,12 @@ public class ServiceAnyGraphRequestConverter extends AbstractCommonServiceLogReq
   @Override
   public ServiceAnyGraphSearchCriteria createCriteria(ServiceAnyGraphRequest anyGraphRequest) {
     ServiceAnyGraphSearchCriteria criteria = new ServiceAnyGraphSearchCriteria();
-    criteria.addParam("xAxis", anyGraphRequest.getxAxis());
-    criteria.addParam("yAxis", anyGraphRequest.getyAxis());
-    criteria.addParam("stackBy", anyGraphRequest.getStackBy());
-    criteria.addParam("unit", anyGraphRequest.getUnit());
-    criteria.addParam("from", anyGraphRequest.getFrom());
-    criteria.addParam("to", anyGraphRequest.getTo());
+    criteria.setxAxis(anyGraphRequest.getxAxis());
+    criteria.setyAxis(anyGraphRequest.getyAxis());
+    criteria.setStackBy(anyGraphRequest.getStackBy());
+    criteria.setUnit(anyGraphRequest.getUnit());
+    criteria.setFrom(anyGraphRequest.getFrom());
+    criteria.setTo(anyGraphRequest.getTo());
     return criteria;
   }
 }

+ 1 - 2
ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/query/converter/ServiceExtremeDatesRequestConverter.java

@@ -18,7 +18,6 @@
  */
 package org.apache.ambari.logsearch.query.converter;
 
-import org.apache.ambari.logsearch.common.LogSearchConstants;
 import org.apache.ambari.logsearch.model.request.impl.ServiceExtremeDatesRequest;
 import org.apache.ambari.logsearch.query.model.ServiceExtremeDatesCriteria;
 import org.springframework.stereotype.Component;
@@ -29,7 +28,7 @@ public class ServiceExtremeDatesRequestConverter extends AbstractCommonSearchReq
   @Override
   public ServiceExtremeDatesCriteria convertToSearchCriteria(ServiceExtremeDatesRequest request) {
     ServiceExtremeDatesCriteria criteria = new ServiceExtremeDatesCriteria();
-    criteria.addParam(LogSearchConstants.BUNDLE_ID, request.getBundleId());
+    criteria.setBundleId(request.getBundleId());
     return criteria;
   }
 }

+ 3 - 3
ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/query/converter/ServiceGraphRequestConverter.java

@@ -28,9 +28,9 @@ public class ServiceGraphRequestConverter extends AbstractCommonServiceLogReques
   @Override
   public ServiceGraphSearchCriteria createCriteria(ServiceGraphRequest request) {
     ServiceGraphSearchCriteria criteria = new ServiceGraphSearchCriteria();
-    criteria.addParam("hostLogFile", request.getHostLogFile());
-    criteria.addParam("compLogFile", request.getComponentLogFile());
-    criteria.addParam("unit", request.getUnit());
+    criteria.setLogFileHostName(request.getHostLogFile());
+    criteria.setLogFileComponentName(request.getComponentLogFile());
+    criteria.setUnit(request.getUnit());
     return criteria;
   }
 }

+ 4 - 5
ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/query/converter/ServiceLogExportRequestConverter.java

@@ -28,11 +28,10 @@ public class ServiceLogExportRequestConverter extends AbstractCommonServiceLogRe
   @Override
   public ServiceLogExportSearchCriteria createCriteria(ServiceLogExportRequest request) {
     ServiceLogExportSearchCriteria criteria = new ServiceLogExportSearchCriteria();
-    criteria.addParam("hostLogFile", request.getHostLogFile());
-    criteria.addParam("compLogFile",
-      request.getComponentLogFile());
-    criteria.addParam("format", request.getFormat());
-    criteria.addParam("utcOffset", request.getUtcOffset());
+    criteria.setLogFileHostName(request.getHostLogFile());
+    criteria.setLogFileComponentName(request.getComponentLogFile());
+    criteria.setFormat(request.getFormat());
+    criteria.setUtcOffset(request.getUtcOffset());
     return criteria;
   }
 }

+ 2 - 2
ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/query/converter/ServiceLogFileRequestConverter.java

@@ -29,8 +29,8 @@ public class ServiceLogFileRequestConverter
   @Override
   public ServiceLogFileSearchCriteria createCriteria(ServiceLogFileRequest request) {
     ServiceLogFileSearchCriteria criteria = new ServiceLogFileSearchCriteria();
-    criteria.addParam("hostLogFile", request.getHostLogFile());
-    criteria.addParam("compLogFile", request.getComponentLogFile());
+    criteria.setLogFileHostName(request.getHostLogFile());
+    criteria.setLogFileComponentName(request.getComponentLogFile());
     return criteria;
   }
 }

+ 7 - 7
ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/query/converter/ServiceLogRequestConverter.java

@@ -29,13 +29,13 @@ public class ServiceLogRequestConverter extends AbstractCommonServiceLogRequestC
   @Override
   public ServiceLogSearchCriteria createCriteria(ServiceLogRequest request) {
     ServiceLogSearchCriteria criteria = new ServiceLogSearchCriteria();
-    criteria.addParam("hostLogFile", request.getHostLogFile());
-    criteria.addParam("compLogFile", request.getComponentLogFile());
-    criteria.addParam("keyword", StringEscapeUtils.unescapeXml(request.getKeyWord()));
-    criteria.addParam("sourceLogId", request.getSourceLogId());
-    criteria.addParam("keywordType", request.getKeywordType());
-    criteria.addParam("token", request.getToken());
-    criteria.addParam("isLastPage", request.isLastPage());
+    criteria.setLogFileComponentName(request.getHostLogFile());
+    criteria.setLogFileComponentName(request.getComponentLogFile());
+    criteria.setKeyword(StringEscapeUtils.unescapeXml(request.getKeyWord()));
+    criteria.setKeywordType(request.getKeywordType());
+    criteria.setSourceLogId(request.getSourceLogId());
+    criteria.setToken(request.getToken());
+    criteria.setLastPage(request.isLastPage());
     return criteria;
   }
 }

+ 5 - 5
ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/query/converter/ServiceLogTruncatedRequestConverter.java

@@ -28,11 +28,11 @@ public class ServiceLogTruncatedRequestConverter extends AbstractCommonServiceLo
   @Override
   public ServiceLogTruncatedSearchCriteria createCriteria(ServiceLogTruncatedRequest request) {
     ServiceLogTruncatedSearchCriteria criteria = new ServiceLogTruncatedSearchCriteria();
-    criteria.addParam("hostLogFile", request.getHostLogFile());
-    criteria.addParam("compLogFile", request.getComponentLogFile());
-    criteria.addParam("id", request.getId());
-    criteria.addParam("scrollType", request.getScrollType());
-    criteria.addParam("numberRows", request.getNumberRows());
+    criteria.setLogFileHostName(request.getHostLogFile());
+    criteria.setLogFileComponentName(request.getComponentLogFile());
+    criteria.setId(request.getId());
+    criteria.setScrollType(request.getScrollType());
+    criteria.setNumberRows(request.getNumberRows());
     return criteria;
   }
 }

+ 6 - 5
ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/query/converter/SimpleQueryRequestConverter.java

@@ -19,16 +19,17 @@
 package org.apache.ambari.logsearch.query.converter;
 
 import org.apache.ambari.logsearch.model.request.impl.SimpleQueryRequest;
-import org.apache.ambari.logsearch.query.model.SearchCriteria;
-import org.springframework.core.convert.converter.Converter;
+import org.apache.ambari.logsearch.query.model.CommonSearchCriteria;
 import org.springframework.stereotype.Component;
 
 @Component
-public class SimpleQueryRequestConverter implements Converter<SimpleQueryRequest, SearchCriteria> {
+public class SimpleQueryRequestConverter extends AbstractConverterAware<SimpleQueryRequest, CommonSearchCriteria> {
+
   @Override
-  public SearchCriteria convert(SimpleQueryRequest simpleQueryRequest) {
-    SearchCriteria searchCriteria = new SearchCriteria();
+  public CommonSearchCriteria convert(SimpleQueryRequest simpleQueryRequest) {
+    CommonSearchCriteria searchCriteria = new CommonSearchCriteria();
     searchCriteria.addParam("q", simpleQueryRequest.getQuery());
     return searchCriteria;
   }
+
 }

+ 4 - 6
ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/query/converter/UserConfigRequestConverter.java

@@ -18,21 +18,19 @@
  */
 package org.apache.ambari.logsearch.query.converter;
 
-import org.apache.ambari.logsearch.common.LogSearchConstants;
 import org.apache.ambari.logsearch.model.request.impl.UserConfigRequest;
 import org.apache.ambari.logsearch.query.model.UserConfigSearchCriteria;
-import org.springframework.core.convert.converter.Converter;
 import org.springframework.stereotype.Component;
 
 @Component
-public class UserConfigRequestConverter implements Converter<UserConfigRequest, UserConfigSearchCriteria> {
+public class UserConfigRequestConverter extends AbstractConverterAware<UserConfigRequest, UserConfigSearchCriteria> {
 
   @Override
   public UserConfigSearchCriteria convert(UserConfigRequest request) {
     UserConfigSearchCriteria criteria = new UserConfigSearchCriteria();
-    criteria.addParam(LogSearchConstants.USER_NAME, request.getUserId());
-    criteria.addParam(LogSearchConstants.FILTER_NAME, request.getFilterName());
-    criteria.addParam(LogSearchConstants.ROW_TYPE, request.getRowType());
+    criteria.setUserName(request.getUserId());
+    criteria.setFilterName(request.getFilterName());
+    criteria.setRowType(request.getRowType());
     return criteria;
   }
 }

+ 2 - 1
ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/query/converter/UserExportRequestConverter.java

@@ -28,7 +28,8 @@ public class UserExportRequestConverter extends AbstractCommonAuditLogRequestCon
   @Override
   public UserExportSearchCriteria createCriteria(UserExportRequest request) {
     UserExportSearchCriteria criteria = new UserExportSearchCriteria();
-    criteria.addParam("field", request.getField());
+    criteria.setField(request.getField());
+    criteria.setFormat(request.getFormat());
     return criteria;
   }
 

+ 54 - 2
ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/query/model/AnyGraphSearchCriteria.java

@@ -18,8 +18,60 @@
  */
 package org.apache.ambari.logsearch.query.model;
 
-import org.apache.ambari.logsearch.common.Marker;
+import static org.apache.ambari.logsearch.query.SearchCriteriaConstants.PARAM_FROM;
+import static org.apache.ambari.logsearch.query.SearchCriteriaConstants.PARAM_STACK_BY;
+import static org.apache.ambari.logsearch.query.SearchCriteriaConstants.PARAM_TO;
+import static org.apache.ambari.logsearch.query.SearchCriteriaConstants.PARAM_UNIT;
+import static org.apache.ambari.logsearch.query.SearchCriteriaConstants.PARAM_X_AXIS;
+import static org.apache.ambari.logsearch.query.SearchCriteriaConstants.PARAM_Y_AXIS;
 
-@Marker
 public class AnyGraphSearchCriteria extends CommonSearchCriteria {
+
+  public String getxAxis() {
+    return getParam(PARAM_X_AXIS, String.class);
+  }
+
+  public void setxAxis(String xAxis) {
+    addParam(PARAM_X_AXIS, xAxis);
+  }
+
+  public String getyAxis() {
+    return getParam(PARAM_Y_AXIS, String.class);
+  }
+
+  public void setyAxis(String yAxis) {
+    addParam(PARAM_Y_AXIS, yAxis);
+  }
+
+  public String getStackBy() {
+    return getParam(PARAM_STACK_BY, String.class);
+  }
+
+  public void setStackBy(String stackBy) {
+    addParam(PARAM_STACK_BY, stackBy);
+  }
+
+  public String getUnit() {
+    return getParam(PARAM_UNIT, String.class);
+  }
+
+  public void setUnit(String unit) {
+    addParam(PARAM_UNIT, unit);
+  }
+
+  public String getFrom() {
+    return getParam(PARAM_FROM, String.class);
+  }
+
+  public void setFrom(String from) {
+    addParam(PARAM_FROM, from);
+  }
+
+  public String getTo() {
+    return getParam(PARAM_TO, String.class);
+  }
+
+  public void setTo(String to) {
+    addParam(PARAM_TO, to);
+  }
 }

+ 10 - 2
ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/query/model/AuditBarGraphSearchCriteria.java

@@ -18,8 +18,16 @@
  */
 package org.apache.ambari.logsearch.query.model;
 
-import org.apache.ambari.logsearch.common.Marker;
+import static org.apache.ambari.logsearch.query.SearchCriteriaConstants.PARAM_UNIT;
 
-@Marker
 public class AuditBarGraphSearchCriteria extends CommonSearchCriteria {
+
+  public void setUnit(String unit) {
+    addParam(PARAM_UNIT, unit);
+  }
+
+  public String getUnit() {
+    return getParam(PARAM_UNIT, String.class);
+  }
+
 }

+ 10 - 2
ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/query/model/AuditLogSearchCriteria.java

@@ -18,8 +18,16 @@
  */
 package org.apache.ambari.logsearch.query.model;
 
-import org.apache.ambari.logsearch.common.Marker;
+import static org.apache.ambari.logsearch.query.SearchCriteriaConstants.PARAM_IS_LAST_PAGE;
 
-@Marker
 public class AuditLogSearchCriteria extends CommonSearchCriteria {
+
+  public void setLastPage(boolean lastPage) {
+    addParam(PARAM_IS_LAST_PAGE, lastPage);
+  }
+
+  public boolean isLastPage() {
+    return getParam(PARAM_IS_LAST_PAGE, Boolean.class);
+  }
+
 }

+ 44 - 49
ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/query/model/CommonSearchCriteria.java

@@ -18,83 +18,78 @@
  */
 package org.apache.ambari.logsearch.query.model;
 
+import static org.apache.ambari.logsearch.query.SearchCriteriaConstants.PARAM_END_TIME;
+import static org.apache.ambari.logsearch.query.SearchCriteriaConstants.PARAM_EXCLUDE_MESSAGE;
+import static org.apache.ambari.logsearch.query.SearchCriteriaConstants.PARAM_EXCLUDE_QUERY;
+import static org.apache.ambari.logsearch.query.SearchCriteriaConstants.PARAM_INCLUDE_MESSAGE;
+import static org.apache.ambari.logsearch.query.SearchCriteriaConstants.PARAM_INCLUDE_QUERY;
+import static org.apache.ambari.logsearch.query.SearchCriteriaConstants.PARAM_MUST_BE_STRING;
+import static org.apache.ambari.logsearch.query.SearchCriteriaConstants.PARAM_MUST_NOT_STRING;
+import static org.apache.ambari.logsearch.query.SearchCriteriaConstants.PARAM_START_TIME;
+
 public class CommonSearchCriteria extends SearchCriteria {
-  private int startIndex = 0;
-  private int maxRows = Integer.MAX_VALUE;
-  private String sortBy = null;
-  private String sortType = null;
-  private int page = 0;
 
-  private String globalStartTime = null;
-  private String globalEndTime = null;
+  public String getIncludeMessage() {
+    return getParam(PARAM_INCLUDE_MESSAGE, String.class);
+  }
+
+  public void setIncludeMessage(String includeMessage) {
+    addParam(PARAM_INCLUDE_MESSAGE, includeMessage);
+  }
 
-  @Override
-  public int getStartIndex() {
-    return startIndex;
+  public String getExcludeMessage() {
+    return getParam(PARAM_EXCLUDE_MESSAGE, String.class);
   }
 
-  @Override
-  public void setStartIndex(int startIndex) {
-    this.startIndex = startIndex;
+  public void setExcludeMessage(String excludeMessage) {
+    addParam(PARAM_EXCLUDE_MESSAGE, excludeMessage);
   }
 
-  @Override
-  public int getMaxRows() {
-    return maxRows;
+  public String getMustBe() {
+    return getParam(PARAM_MUST_BE_STRING, String.class);
   }
 
-  @Override
-  public void setMaxRows(int maxRows) {
-    this.maxRows = maxRows;
+  public void setMustBe(String mustHave) {
+    addParam(PARAM_MUST_BE_STRING, mustHave);
   }
 
-  @Override
-  public String getSortType() {
-    return sortType;
+  public String getMustNot() {
+    return getParam(PARAM_MUST_NOT_STRING, String.class);
   }
 
-  @Override
-  public void setSortType(String sortType) {
-    this.sortType = sortType;
+  public void setMustNot(String mustNot) {
+    addParam(PARAM_MUST_NOT_STRING, mustNot);
   }
 
-  @Override
-  public String getSortBy() {
-    return sortBy;
+  public String getIncludeQuery() {
+    return getParam(PARAM_INCLUDE_QUERY, String.class);
   }
 
-  @Override
-  public void setSortBy(String sortBy) {
-    this.sortBy = sortBy;
+  public void setIncludeQuery(String includeQuery) {
+    addParam(PARAM_INCLUDE_QUERY, includeQuery);
   }
 
-  @Override
-  public int getPage() {
-    return page;
+  public String getExcludeQuery() {
+    return getParam(PARAM_EXCLUDE_QUERY, String.class);
   }
 
-  @Override
-  public void setPage(int page) {
-    this.page = page;
+  public void setExcludeQuery(String excludeQuery) {
+    addParam(PARAM_EXCLUDE_QUERY, excludeQuery);
   }
 
-  @Override
-  public String getGlobalStartTime() {
-    return globalStartTime;
+  public String getStartTime() {
+    return getParam(PARAM_START_TIME, String.class);
   }
 
-  @Override
-  public void setGlobalStartTime(String globalStartTime) {
-    this.globalStartTime = globalStartTime;
+  public void setStartTime(String startTime) {
+    addParam(PARAM_START_TIME, startTime);
   }
 
-  @Override
-  public String getGlobalEndTime() {
-    return globalEndTime;
+  public String getEndTime() {
+    return getParam(PARAM_END_TIME, String.class);
   }
 
-  @Override
-  public void setGlobalEndTime(String globalEndTime) {
-    this.globalEndTime = globalEndTime;
+  public void setEndTime(String endTime) {
+    addParam(PARAM_END_TIME, endTime);
   }
 }

+ 96 - 0
ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/query/model/CommonServiceLogSearchCriteria.java

@@ -0,0 +1,96 @@
+/*
+ * 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.logsearch.query.model;
+
+import org.apache.ambari.logsearch.query.SearchCriteriaConstants;
+
+public class CommonServiceLogSearchCriteria extends CommonSearchCriteria {
+
+  public String getTreeParams() {
+    return getParam(SearchCriteriaConstants.PARAM_TREE_PARAMS, String.class);
+  }
+
+  public void setTreeParams(String treeParams) {
+    addParam(SearchCriteriaConstants.PARAM_TREE_PARAMS, treeParams);
+  }
+
+  public String getLevel() {
+    return getParam(SearchCriteriaConstants.PARAM_LEVEL, String.class);
+  }
+
+  public void setLevel(String level) {
+    addParam(SearchCriteriaConstants.PARAM_LEVEL, level);
+  }
+
+  public String getSelectComp() {
+    return getParam(SearchCriteriaConstants.PARAM_SELECT_COMP, String.class);
+  }
+
+  public void setSelectComp(String selectComp) {
+    addParam(SearchCriteriaConstants.PARAM_SELECT_COMP, selectComp);
+  }
+
+  public String getBundleId() {
+    return getParam(SearchCriteriaConstants.PARAM_BUNDLE_ID, String.class);
+  }
+
+  public void setBundleId(String bunldeId) {
+    addParam(SearchCriteriaConstants.PARAM_BUNDLE_ID, bunldeId);
+  }
+
+  public String getFrom() {
+    return getParam(SearchCriteriaConstants.PARAM_FROM ,String.class);
+  }
+
+  public void setFrom(String from) {
+    addParam(SearchCriteriaConstants.PARAM_FROM, from);
+  }
+
+  public String getTo() {
+    return getParam(SearchCriteriaConstants.PARAM_TO ,String.class);
+  }
+
+  public void setTo(String to) {
+    addParam(SearchCriteriaConstants.PARAM_TO, to);
+  }
+
+  public String getHostName() {
+    return getParam(SearchCriteriaConstants.PARAM_HOST_NAME ,String.class);
+  }
+
+  public void setHostName(String hostName) {
+    addParam(SearchCriteriaConstants.PARAM_HOST_NAME, hostName);
+  }
+
+  public String getComponentName() {
+    return getParam(SearchCriteriaConstants.PARAM_COMPONENT_NAME ,String.class);
+  }
+
+  public void setComponentName(String componentName) {
+    addParam(SearchCriteriaConstants.PARAM_COMPONENT_NAME, componentName);
+  }
+
+  public String getFileName() {
+    return getParam(SearchCriteriaConstants.PARAM_FILE_NAME ,String.class);
+  }
+
+  public void setFileName(String fileName) {
+    addParam(SearchCriteriaConstants.PARAM_FILE_NAME, fileName);
+  }
+}

+ 9 - 2
ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/query/model/FieldAuditBarGraphSearchCriteria.java

@@ -18,8 +18,15 @@
  */
 package org.apache.ambari.logsearch.query.model;
 
-import org.apache.ambari.logsearch.common.Marker;
+import static org.apache.ambari.logsearch.query.SearchCriteriaConstants.PARAM_FIELD;
 
-@Marker
 public class FieldAuditBarGraphSearchCriteria extends AuditBarGraphSearchCriteria {
+
+  public String getField() {
+    return getParam(PARAM_FIELD, String.class);
+  }
+
+  public void setField(String field) {
+    addParam(PARAM_FIELD, field);
+  }
 }

+ 9 - 2
ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/query/model/FieldAuditLogSearchCriteria.java

@@ -18,8 +18,15 @@
  */
 package org.apache.ambari.logsearch.query.model;
 
-import org.apache.ambari.logsearch.common.Marker;
+import static org.apache.ambari.logsearch.query.SearchCriteriaConstants.PARAM_FIELD;
 
-@Marker
 public class FieldAuditLogSearchCriteria extends CommonSearchCriteria {
+
+  public String getField() {
+    return getParam(PARAM_FIELD, String.class);
+  }
+
+  public void setField(String field) {
+    addParam(PARAM_FIELD, field);
+  }
 }

+ 28 - 1
ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/query/model/LogFileSearchCriteria.java

@@ -20,6 +20,33 @@ package org.apache.ambari.logsearch.query.model;
 
 import org.apache.ambari.logsearch.common.Marker;
 
-@Marker
+import static org.apache.ambari.logsearch.query.SearchCriteriaConstants.PARAM_LOG_FILE_COMPONENT;
+import static org.apache.ambari.logsearch.query.SearchCriteriaConstants.PARAM_LOG_FILE_HOST;
+import static org.apache.ambari.logsearch.query.SearchCriteriaConstants.PARAM_LOG_FILE_TYPE;
+
 public class LogFileSearchCriteria extends SearchCriteria {
+
+  public String getLogFileComponent() {
+    return getParam(PARAM_LOG_FILE_COMPONENT, String.class);
+  }
+
+  public void setLogFileComponent(String logFileComponent) {
+    addParam(PARAM_LOG_FILE_COMPONENT, logFileComponent);
+  }
+
+  public String getLogFileHost() {
+    return getParam(PARAM_LOG_FILE_HOST, String.class);
+  }
+
+  public void setLogFileHost(String logFileHost) {
+    addParam(PARAM_LOG_FILE_HOST, logFileHost);
+  }
+
+  public String getLogType() {
+    return getParam(PARAM_LOG_FILE_TYPE, String.class);
+  }
+
+  public void setLogType(String logType) {
+    addParam(PARAM_LOG_FILE_TYPE, logType);
+  }
 }

+ 10 - 3
ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/query/model/LogFileTailSearchCriteria.java

@@ -18,8 +18,15 @@
  */
 package org.apache.ambari.logsearch.query.model;
 
-import org.apache.ambari.logsearch.common.Marker;
+import static org.apache.ambari.logsearch.query.SearchCriteriaConstants.PARAM_LOG_TAIL_SIZE;
 
-@Marker
-public class LogFileTailSearchCriteria extends SearchCriteria {
+public class LogFileTailSearchCriteria extends LogFileSearchCriteria {
+
+  public String getLogTailSize() {
+    return getParam(PARAM_LOG_TAIL_SIZE, String.class);
+  }
+
+  public void setLogTailSize(String logTailSize) {
+    addParam(PARAM_LOG_TAIL_SIZE, logTailSize);
+  }
 }

+ 25 - 35
ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/query/model/SearchCriteria.java

@@ -25,6 +25,7 @@ import java.util.Map;
 import org.apache.ambari.logsearch.common.PropertiesHelper;
 
 public class SearchCriteria {
+
   private int startIndex = 0;
   private int maxRows = Integer.MAX_VALUE;
   private String sortBy = null;
@@ -42,6 +43,30 @@ public class SearchCriteria {
     // Auto-generated constructor stub
   }
 
+
+  public void addParam(String name, Object value) {
+    paramList.put(name, value);
+  }
+
+  public Object getParamValue(String name) {
+    return paramList.get(name);
+  }
+
+  public <T> T getParam(String key, Class<T> type) {
+    if (getParamValue(key) != null) {
+      return (T) getParamValue(key);
+    }
+    return null;
+  }
+
+  public Map<String, Object> getUrlParamMap() {
+    return urlParamMap;
+  }
+
+  public void setUrlParamMap(Map<String, Object> urlParamMap) {
+    this.urlParamMap = urlParamMap;
+  }
+
   public int getStartIndex() {
     return startIndex;
   }
@@ -62,33 +87,6 @@ public class SearchCriteria {
     return sortType;
   }
 
-
-  public void addParam(String name, Object value) {
-    String solrValue = PropertiesHelper.getProperty(name);
-    if (solrValue == null || solrValue.isEmpty()) {
-      paramList.put(name, value);
-    } else {
-      try {
-        String propertyFieldMappings[] = solrValue.split(",");
-        HashMap<String, String> propertyFieldValue = new HashMap<String, String>();
-        for (String temp : propertyFieldMappings) {
-          String arrayValue[] = temp.split(":");
-          propertyFieldValue.put(arrayValue[0].toLowerCase(Locale.ENGLISH), arrayValue[1].toLowerCase(Locale.ENGLISH));
-        }
-        String originalValue = propertyFieldValue.get(value.toString().toLowerCase(Locale.ENGLISH));
-        if (originalValue != null && !originalValue.isEmpty())
-          paramList.put(name, originalValue);
-
-      } catch (Exception e) {
-        //do nothing
-      }
-    }
-  }
-
-  public Object getParamValue(String name) {
-    return paramList.get(name);
-  }
-
   public String getSortBy() {
     return sortBy;
   }
@@ -125,12 +123,4 @@ public class SearchCriteria {
     this.globalEndTime = globalEndTime;
   }
 
-  public Map<String, Object> getUrlParamMap() {
-    return urlParamMap;
-  }
-
-  public void setUrlParamMap(Map<String, Object> urlParamMap) {
-    this.urlParamMap = urlParamMap;
-  }
-
 }

+ 36 - 1
ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/query/model/ServiceAnyGraphSearchCriteria.java

@@ -20,6 +20,41 @@ package org.apache.ambari.logsearch.query.model;
 
 import org.apache.ambari.logsearch.common.Marker;
 
-@Marker
+import static org.apache.ambari.logsearch.query.SearchCriteriaConstants.PARAM_STACK_BY;
+import static org.apache.ambari.logsearch.query.SearchCriteriaConstants.PARAM_UNIT;
+import static org.apache.ambari.logsearch.query.SearchCriteriaConstants.PARAM_X_AXIS;
+import static org.apache.ambari.logsearch.query.SearchCriteriaConstants.PARAM_Y_AXIS;
+
 public class ServiceAnyGraphSearchCriteria extends ServiceLogFileSearchCriteria {
+  public String getxAxis() {
+    return getParam(PARAM_X_AXIS, String.class);
+  }
+
+  public void setxAxis(String xAxis) {
+    addParam(PARAM_X_AXIS, xAxis);
+  }
+
+  public String getyAxis() {
+    return getParam(PARAM_Y_AXIS, String.class);
+  }
+
+  public void setyAxis(String yAxis) {
+    addParam(PARAM_Y_AXIS, yAxis);
+  }
+
+  public String getStackBy() {
+    return getParam(PARAM_STACK_BY, String.class);
+  }
+
+  public void setStackBy(String stackBy) {
+    addParam(PARAM_STACK_BY, stackBy);
+  }
+
+  public String getUnit() {
+    return getParam(PARAM_UNIT, String.class);
+  }
+
+  public void setUnit(String unit) {
+    addParam(PARAM_UNIT, unit);
+  }
 }

+ 9 - 2
ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/query/model/ServiceExtremeDatesCriteria.java

@@ -18,8 +18,15 @@
  */
 package org.apache.ambari.logsearch.query.model;
 
-import org.apache.ambari.logsearch.common.Marker;
+import org.apache.ambari.logsearch.query.SearchCriteriaConstants;
 
-@Marker
 public class ServiceExtremeDatesCriteria extends CommonSearchCriteria {
+
+  public String getBundleId() {
+    return getParam(SearchCriteriaConstants.PARAM_BUNDLE_ID, String.class);
+  }
+
+  public void setBundleId(String bunldeId) {
+    addParam(SearchCriteriaConstants.PARAM_BUNDLE_ID, bunldeId);
+  }
 }

+ 9 - 2
ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/query/model/ServiceGraphSearchCriteria.java

@@ -18,8 +18,15 @@
  */
 package org.apache.ambari.logsearch.query.model;
 
-import org.apache.ambari.logsearch.common.Marker;
+import org.apache.ambari.logsearch.query.SearchCriteriaConstants;
 
-@Marker
 public class ServiceGraphSearchCriteria extends ServiceLogFileSearchCriteria {
+
+  public String getUnit() {
+    return getParam(SearchCriteriaConstants.PARAM_UNIT, String.class);
+  }
+
+  public void setUnit(String unit) {
+    addParam(SearchCriteriaConstants.PARAM_UNIT, unit);
+  }
 }

+ 17 - 2
ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/query/model/ServiceLogExportSearchCriteria.java

@@ -18,8 +18,23 @@
  */
 package org.apache.ambari.logsearch.query.model;
 
-import org.apache.ambari.logsearch.common.Marker;
+import org.apache.ambari.logsearch.query.SearchCriteriaConstants;
 
-@Marker
 public class ServiceLogExportSearchCriteria extends ServiceLogFileSearchCriteria {
+
+  public void setFormat(String format) {
+    addParam(SearchCriteriaConstants.PARAM_FORMAT, format);
+  }
+
+  public String getFormat() {
+    return getParam(SearchCriteriaConstants.PARAM_FORMAT, String.class);
+  }
+
+  public void setUtcOffset(String utcOffset) {
+    addParam(SearchCriteriaConstants.PARAM_UTC_OFFSET, utcOffset);
+  }
+
+  public String getUtcOffset() {
+    return getParam(SearchCriteriaConstants.PARAM_UTC_OFFSET, String.class);
+  }
 }

+ 18 - 3
ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/query/model/ServiceLogFileSearchCriteria.java

@@ -18,8 +18,23 @@
  */
 package org.apache.ambari.logsearch.query.model;
 
-import org.apache.ambari.logsearch.common.Marker;
+import org.apache.ambari.logsearch.query.SearchCriteriaConstants;
 
-@Marker
-public class ServiceLogFileSearchCriteria extends CommonSearchCriteria {
+public class ServiceLogFileSearchCriteria extends CommonServiceLogSearchCriteria {
+
+  public void setLogFileHostName(String logFileHostName) {
+    addParam(SearchCriteriaConstants.PARAM_HOST_LOG_FILE, logFileHostName);
+  }
+
+  public String getLogFileHostName() {
+    return getParam(SearchCriteriaConstants.PARAM_HOST_LOG_FILE, String.class);
+  }
+
+  public void setLogFileComponentName(String logFileComponentName) {
+    addParam(SearchCriteriaConstants.PARAM_COMPONENT_LOG_FILE, logFileComponentName);
+  }
+
+  public String getLogFileComponentName() {
+    return getParam(SearchCriteriaConstants.PARAM_COMPONENT_LOG_FILE, String.class);
+  }
 }

+ 42 - 2
ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/query/model/ServiceLogSearchCriteria.java

@@ -18,8 +18,48 @@
  */
 package org.apache.ambari.logsearch.query.model;
 
-import org.apache.ambari.logsearch.common.Marker;
+import org.apache.ambari.logsearch.query.SearchCriteriaConstants;
 
-@Marker
 public class ServiceLogSearchCriteria extends ServiceLogFileSearchCriteria {
+
+  public void setKeyword(String keyword) {
+    addParam(SearchCriteriaConstants.PARAM_KEYWORD, keyword);
+  }
+
+  public String getKeyword() {
+    return getParam(SearchCriteriaConstants.PARAM_KEYWORD, String.class);
+  }
+
+  public void setKeywordType(String keywordType) {
+    addParam(SearchCriteriaConstants.PARAM_KEYWORD_TYPE, keywordType);
+  }
+
+  public String getKeywordType() {
+    return getParam(SearchCriteriaConstants.PARAM_KEYWORD_TYPE, String.class);
+  }
+
+  public void setSourceLogId(String sourceLogId) {
+    addParam(SearchCriteriaConstants.PARAM_SOURCE_LOG_ID, sourceLogId);
+  }
+
+  public String getSourceLogId() {
+    return getParam(SearchCriteriaConstants.PARAM_SOURCE_LOG_ID, String.class);
+  }
+
+  public void setToken(String token) {
+    addParam(SearchCriteriaConstants.PARAM_TOKEN, token);
+  }
+
+  public String getToken() {
+    return getParam(SearchCriteriaConstants.PARAM_TOKEN, String.class);
+  }
+
+  public void setLastPage(boolean lastPage) {
+    addParam(SearchCriteriaConstants.PARAM_IS_LAST_PAGE, lastPage);
+  }
+
+  public boolean isLastPage() {
+    return getParam(SearchCriteriaConstants.PARAM_IS_LAST_PAGE, Boolean.class);
+  }
+
 }

+ 25 - 2
ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/query/model/ServiceLogTruncatedSearchCriteria.java

@@ -18,8 +18,31 @@
  */
 package org.apache.ambari.logsearch.query.model;
 
-import org.apache.ambari.logsearch.common.Marker;
+import org.apache.ambari.logsearch.query.SearchCriteriaConstants;
 
-@Marker
 public class ServiceLogTruncatedSearchCriteria extends ServiceLogFileSearchCriteria {
+
+  public String getId() {
+    return getParam(SearchCriteriaConstants.PARAM_ID, String.class);
+  }
+
+  public void setId(String id) {
+    addParam(SearchCriteriaConstants.PARAM_ID, id);
+  }
+
+  public String getScrollType() {
+    return getParam(SearchCriteriaConstants.PARAM_SCROLL_TYPE, String.class);
+  }
+
+  public void setScrollType(String scrollType) {
+    addParam(SearchCriteriaConstants.PARAM_SCROLL_TYPE, scrollType);
+  }
+
+  public String getNumberRows() {
+    return getParam(SearchCriteriaConstants.PARAM_NUMBER_ROWS, String.class);
+  }
+
+  public void setNumberRows(String numberRows) {
+    addParam(SearchCriteriaConstants.PARAM_NUMBER_ROWS, numberRows);
+  }
 }

+ 25 - 2
ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/query/model/UserConfigSearchCriteria.java

@@ -18,8 +18,31 @@
  */
 package org.apache.ambari.logsearch.query.model;
 
-import org.apache.ambari.logsearch.common.Marker;
+import org.apache.ambari.logsearch.query.SearchCriteriaConstants;
 
-@Marker
 public class UserConfigSearchCriteria extends CommonSearchCriteria {
+
+  public String getUserName() {
+    return getParam(SearchCriteriaConstants.PARAM_USER_NAME, String.class);
+  }
+
+  public void setUserName(String userName) {
+    addParam(SearchCriteriaConstants.PARAM_USER_NAME, userName);
+  }
+
+  public String getFilterName() {
+    return getParam(SearchCriteriaConstants.PARAM_FILTER_NAME, String.class);
+  }
+
+  public void setFilterName(String filterName) {
+    addParam(SearchCriteriaConstants.PARAM_FILTER_NAME, filterName);
+  }
+
+  public String getRowType() {
+    return getParam(SearchCriteriaConstants.PARAM_ROW_TYPE, String.class);
+  }
+
+  public void setRowType(String rowType) {
+    addParam(SearchCriteriaConstants.PARAM_ROW_TYPE, rowType);
+  }
 }

+ 8 - 2
ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/query/model/UserExportSearchCriteria.java

@@ -18,8 +18,14 @@
  */
 package org.apache.ambari.logsearch.query.model;
 
-import org.apache.ambari.logsearch.common.Marker;
+import org.apache.ambari.logsearch.query.SearchCriteriaConstants;
 
-@Marker
 public class UserExportSearchCriteria extends FieldAuditLogSearchCriteria {
+  public void setFormat(String format) {
+    addParam(SearchCriteriaConstants.PARAM_FORMAT, format);
+  }
+
+  public String getFormat() {
+    return getParam(SearchCriteriaConstants.PARAM_FORMAT, String.class);
+  }
 }

+ 1 - 1
ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/rest/AuditLogsResource.java

@@ -87,7 +87,7 @@ public class AuditLogsResource {
   @Produces({"application/json"})
   @ApiOperation(GET_AUDIT_COMPONENTS_OD)
   public GroupListResponse getAuditComponents(@BeanParam SimpleQueryRequest request) {
-    return auditLogsManager.getAuditComponents(conversionService.convert(request, SearchCriteria.class));
+    return auditLogsManager.getAuditComponents(conversionService.convert(request, CommonSearchCriteria.class));
   }
 
   @GET

+ 4 - 3
ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/rest/ServiceLogsResource.java

@@ -45,6 +45,7 @@ import org.apache.ambari.logsearch.model.response.NameValueDataListResponse;
 import org.apache.ambari.logsearch.model.response.NodeListResponse;
 import org.apache.ambari.logsearch.model.response.ServiceLogResponse;
 import org.apache.ambari.logsearch.query.model.CommonSearchCriteria;
+import org.apache.ambari.logsearch.query.model.CommonServiceLogSearchCriteria;
 import org.apache.ambari.logsearch.query.model.SearchCriteria;
 import org.apache.ambari.logsearch.manager.ServiceLogsManager;
 import org.apache.ambari.logsearch.query.model.ServiceAnyGraphSearchCriteria;
@@ -100,7 +101,7 @@ public class ServiceLogsResource {
   @Produces({"application/json"})
   @ApiOperation(GET_AGGREGATED_INFO_OD)
   public GraphDataListResponse getAggregatedInfo(@BeanParam BaseServiceLogRequest request) {
-    return serviceLogsManager.getAggregatedInfo(conversionService.convert(request, CommonSearchCriteria.class));
+    return serviceLogsManager.getAggregatedInfo(conversionService.convert(request, CommonServiceLogSearchCriteria.class));
   }
 
   @GET
@@ -132,7 +133,7 @@ public class ServiceLogsResource {
   @Produces({"application/json"})
   @ApiOperation(GET_TREE_EXTENSION_OD)
   public NodeListResponse getTreeExtension(@QueryParam("hostName") @ApiParam String hostName, @BeanParam ServiceLogFileRequest request) {
-    SearchCriteria searchCriteria = conversionService.convert(request, ServiceLogFileSearchCriteria.class);
+    ServiceLogFileSearchCriteria searchCriteria = conversionService.convert(request, ServiceLogFileSearchCriteria.class);
     searchCriteria.addParam("hostName", hostName); // TODO: use host_name instead - needs UI change
     return serviceLogsManager.getTreeExtension(searchCriteria);
   }
@@ -175,7 +176,7 @@ public class ServiceLogsResource {
   @Produces({"application/json"})
   @ApiOperation(GET_HOST_LIST_BY_COMPONENT_OD)
   public NodeListResponse getHostListByComponent(@BeanParam ServiceLogFileRequest request, @QueryParam("componentName") @ApiParam String componentName) {
-    SearchCriteria searchCriteria = conversionService.convert(request, ServiceLogFileSearchCriteria.class);
+    ServiceLogFileSearchCriteria searchCriteria = conversionService.convert(request, ServiceLogFileSearchCriteria.class);
     searchCriteria.addParam("componentName", componentName); // TODO: use component_name instead - needs UI change
     return serviceLogsManager.getHostListByComponent(searchCriteria);
   }

+ 0 - 134
ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/solr/metrics/SolrJmxAdapter.java

@@ -1,134 +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.logsearch.solr.metrics;
-
-import java.io.IOException;
-import java.lang.management.MemoryMXBean;
-import java.net.MalformedURLException;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Set;
-
-import javax.management.JMX;
-import javax.management.MBeanServerConnection;
-import javax.management.MalformedObjectNameException;
-import javax.management.ObjectName;
-import javax.management.remote.JMXConnector;
-import javax.management.remote.JMXConnectorFactory;
-import javax.management.remote.JMXServiceURL;
-
-import com.sun.management.OperatingSystemMXBean;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-@SuppressWarnings("restriction")
-public class SolrJmxAdapter {
-  private static final Logger LOG = LoggerFactory.getLogger(SolrJmxAdapter.class);
-
-  private static final String JMX_SERVICE_URL = "service:jmx:rmi:///jndi/rmi://%s:%d/jmxrmi";
-
-  private final JMXServiceURL jmxServiceUrl;
-
-  private JMXConnector jmxConnector;
-  private MBeanServerConnection conn;
-
-  public SolrJmxAdapter(String host, int port) throws MalformedURLException {
-    String url = String.format(JMX_SERVICE_URL, host, port);
-    jmxServiceUrl = new JMXServiceURL(url);
-  }
-
-  public double getProcessCpuLoad() throws MalformedObjectNameException {
-    ObjectName objectName = new ObjectName("java.lang:type=OperatingSystem");
-    OperatingSystemMXBean mxBean = JMX.newMXBeanProxy(conn, objectName, OperatingSystemMXBean.class);
-    return mxBean.getProcessCpuLoad();
-  }
-
-  public Map<String, Long> getMemoryData() throws MalformedObjectNameException {
-    Map<String, Long> memoryData = new HashMap<>();
-    
-    ObjectName objectName = new ObjectName("java.lang:type=Memory");
-    MemoryMXBean mxBean = JMX.newMXBeanProxy(conn, objectName, MemoryMXBean.class);
-    
-    memoryData.put("heapMemoryUsed", mxBean.getHeapMemoryUsage().getUsed());
-    memoryData.put("heapMemoryCommitted", mxBean.getHeapMemoryUsage().getCommitted());
-    memoryData.put("heapMemoryMax", mxBean.getHeapMemoryUsage().getMax());
-    memoryData.put("nonHeapMemoryUsed", mxBean.getNonHeapMemoryUsage().getUsed());
-    memoryData.put("nonHeapMemoryCommitted", mxBean.getNonHeapMemoryUsage().getCommitted());
-    memoryData.put("nonHeapMemoryMax", mxBean.getNonHeapMemoryUsage().getMax());
-    
-    return memoryData;
-  }
-
-  public long getIndexSize() throws Exception {
-    long indexSize = 0;
-
-    ObjectName objectNamePattern = new ObjectName(
-        "solr/*shard*replica*:type=/replication,id=org.apache.solr.handler.ReplicationHandler");
-    Set<ObjectName> objectNames = conn.queryNames(objectNamePattern, null);
-    for (ObjectName objectName : objectNames) {
-      String indexSizeString = (String) conn.getAttribute(objectName, "indexSize");
-      indexSize += getIndexSizeInBytes(indexSizeString);
-    }
-
-    return indexSize;
-  }
-
-  private long getIndexSizeInBytes(String indexSizeString) {
-    String[] tokens = indexSizeString.split(" ");
-    double number = Double.parseDouble(tokens[0]);
-
-    long multiplier = 0;
-    switch (tokens[1]) {
-      case "bytes":
-        multiplier = 1;
-        break;
-      case "KB":
-        multiplier = 1024;
-        break;
-      case "MB":
-        multiplier = 1024 * 1024;
-        break;
-      case "GB":
-        multiplier = 1024 * 1024 * 1024;
-        break;
-      default:
-        throw new IllegalArgumentException("Unknown unit: " + tokens[1]);
-    }
-    
-    return (long)(number * multiplier);
-  }
-
-  public void reConnect() throws IOException {
-    if (jmxConnector != null) {
-      try {
-        jmxConnector.close();
-      } catch (IOException e) {
-        LOG.info("Could not close jmxConnector", e);
-      }
-    }
-
-    connect();
-  }
-
-  public void connect() throws IOException {
-    jmxConnector = JMXConnectorFactory.connect(jmxServiceUrl);
-    conn = jmxConnector.getMBeanServerConnection();
-  }
-}

+ 0 - 198
ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/solr/metrics/SolrMetricsLoader.java

@@ -1,198 +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.logsearch.solr.metrics;
-
-import java.io.IOException;
-import java.util.Collection;
-import java.util.Map;
-import java.util.Timer;
-import java.util.TimerTask;
-import java.util.TreeMap;
-
-import javax.management.MalformedObjectNameException;
-
-import org.apache.ambari.logsearch.common.PropertiesHelper;
-import org.apache.ambari.logsearch.solr.AmbariSolrCloudClient;
-import org.apache.ambari.logsearch.solr.AmbariSolrCloudClientBuilder;
-import org.apache.commons.lang.StringUtils;
-import org.apache.hadoop.metrics2.sink.timeline.TimelineMetric;
-import org.apache.hadoop.metrics2.sink.timeline.TimelineMetrics;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class SolrMetricsLoader extends TimerTask {
-  private static final Logger LOG = LoggerFactory.getLogger(SolrMetricsLoader.class);
-
-  private static final int RETRY = 3;
-  private static final int MAX_METRIC_SIZE= 1000;
-
-  private final String solrHost;
-  private final SolrJmxAdapter solrJmxAdapter;
-  private final SolrAmsClient solrAmsClient;
-  
-  private final TimelineMetrics metrics = new TimelineMetrics();
-
-  public SolrMetricsLoader(String solrHost, int solrJmxPort, String collectorHost) throws IOException {
-    this.solrHost = solrHost;
-    this.solrJmxAdapter = new SolrJmxAdapter(solrHost, solrJmxPort);
-    this.solrAmsClient = new SolrAmsClient(collectorHost);
-
-    solrJmxAdapter.connect();
-  }
-
-  @Override
-  public void run() {
-    LOG.info("Loading Solr Metrics for the host " + solrHost);
-
-    addCpuUsageMetric();
-    addHeapMemoryUsageMetric();
-    addIndexSizeMetric();
-
-    emitMetrics();
-    removeOverTheLimitMetrics();
-  }
-
-  private void addCpuUsageMetric() {
-    Exception lastException = null;
-    for (int retries = 0; retries < RETRY; retries++) {
-      try {
-        double processCpuLoad = solrJmxAdapter.getProcessCpuLoad();
-        addMetric("logsearch.solr.cpu.usage", "Float", processCpuLoad);
-        return;
-      } catch (MalformedObjectNameException e) {
-        lastException = e;
-        try {
-          solrJmxAdapter.reConnect();
-        } catch (IOException e1) {
-        }
-      }
-    }
-
-    LOG.info("Could not load solr cpu usage metric, last exception:", lastException);
-  }
-
-  private void addHeapMemoryUsageMetric() {
-    Exception lastException = null;
-    for (int retries = 0; retries < RETRY; retries++) {
-      try {
-        Map<String, Long> memoryData = solrJmxAdapter.getMemoryData();
-        addMetric("jvm.JvmMetrics.MemHeapUsedM", "Long", memoryData.get("heapMemoryUsed").doubleValue() / 1024 / 1024);
-        addMetric("jvm.JvmMetrics.MemHeapCommittedM", "Long", memoryData.get("heapMemoryCommitted").doubleValue() / 1024 / 1024);
-        addMetric("jvm.JvmMetrics.MemHeapMaxM", "Long", memoryData.get("heapMemoryMax").doubleValue() / 1024 / 1024);
-        addMetric("jvm.JvmMetrics.MemNonHeapUsedM", "Long", memoryData.get("nonHeapMemoryUsed").doubleValue() / 1024 / 1024);
-        addMetric("jvm.JvmMetrics.MemNonHeapCommittedM", "Long", memoryData.get("nonHeapMemoryCommitted").doubleValue() / 1024 / 1024);
-        addMetric("jvm.JvmMetrics.MemNonHeapMaxM", "Long", memoryData.get("nonHeapMemoryMax").doubleValue() / 1024 / 1024);
-        return;
-      } catch (MalformedObjectNameException e) {
-        lastException = e;
-        try {
-          solrJmxAdapter.reConnect();
-        } catch (IOException e1) {
-        }
-      }
-    }
-
-    LOG.info("Could not load solr heap memory usage metric, last exception:", lastException);
-  }
-
-  private void addIndexSizeMetric() {
-    Exception lastException = null;
-    for (int retries = 0; retries < RETRY; retries++) {
-      try {
-        double indexSize = solrJmxAdapter.getIndexSize();
-        addMetric("logsearch.solr.index.size", "Long", indexSize / 1024 / 1024 / 1024);
-        return;
-      } catch (Exception e) {
-        lastException = e;
-        try {
-          solrJmxAdapter.reConnect();
-        } catch (IOException e1) {
-        }
-      }
-    }
-
-    LOG.info("Could not load solr index size metric, last exception:", lastException);
-  }
-
-  private void addMetric(String metricName, String type, Double value) {
-    Long currMS = System.currentTimeMillis();
-
-    TimelineMetric metric = new TimelineMetric();
-    metric.setMetricName(metricName);
-    metric.setHostName(solrHost);
-    metric.setAppId("infra-solr");
-    metric.setStartTime(currMS);
-    metric.setType(type);
-    metric.setTimestamp(currMS);
-    metric.getMetricValues().put(currMS, value);
-
-    metrics.addOrMergeTimelineMetric(metric);
-  }
-
-  private void emitMetrics() {
-    Exception lastException = null;
-    for (int retries = 0; retries < RETRY; retries++) {
-      try {
-        if (solrAmsClient.emitMetrics(metrics)) {
-          metrics.getMetrics().clear();
-          return;
-        }
-      } catch (Exception e) {
-        lastException = e;
-      }
-    }
-
-    LOG.info("Could not emit metrics, last exception:", lastException);
-  }
-
-  private void removeOverTheLimitMetrics() {
-    for (TimelineMetric metric : metrics.getMetrics()) {
-      TreeMap<Long, Double> metricValues = metric.getMetricValues();
-      while (metricValues.size() > MAX_METRIC_SIZE) {
-        metricValues.remove(metricValues.firstKey());
-      }
-    }
-  }
-
-  public static void startSolrMetricsLoaderTasks() {
-    try {
-      String collectorHosts = PropertiesHelper.getProperty("logsearch.solr.metrics.collector.hosts");
-      if (StringUtils.isEmpty(collectorHosts)) {
-        LOG.warn("No Ambari Metrics service is available, no Solr metrics will be loaded!");
-        return;
-      }
-
-      int solrJmxPort = PropertiesHelper.getIntProperty("logsearch.solr.jmx.port");
-
-      String zkConnectString = PropertiesHelper.getProperty("logsearch.solr.zk_connect_string");
-      AmbariSolrCloudClient ambariSolrCloudClient = new AmbariSolrCloudClientBuilder()
-          .withZkConnectString(zkConnectString)
-          .build();
-
-      Collection<String> solrHosts = ambariSolrCloudClient.getSolrHosts();
-      for (String solrHost : solrHosts) {
-        SolrMetricsLoader sml = new SolrMetricsLoader(solrHost, solrJmxPort, collectorHosts);
-        Timer timer = new Timer("Solr Metrics Loader - " + solrHost, true);
-        timer.scheduleAtFixedRate(sml, 0, 10000);
-      }
-    } catch (Exception e) {
-      LOG.warn("Could not start solr metric loader tasks", e);
-    }
-  }
-}

+ 3 - 3
ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/solr/model/SolrAuditLogData.java

@@ -69,7 +69,7 @@ public class SolrAuditLogData extends SolrCommonLogData implements AuditLogData
   private String repo;
 
   @Field("repoType")
-  private String repoType;
+  private Integer repoType;
 
   @Field("reqData")
   private String requestData;
@@ -188,12 +188,12 @@ public class SolrAuditLogData extends SolrCommonLogData implements AuditLogData
   }
 
   @Override
-  public String getRepoType() {
+  public Integer getRepoType() {
     return repoType;
   }
 
   @Override
-  public void setRepoType(String repoType) {
+  public void setRepoType(Integer repoType) {
     this.repoType = repoType;
   }
 

+ 1 - 1
ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/web/authenticate/LogsearchLogoutSuccessHandler.java

@@ -36,6 +36,6 @@ public class LogsearchLogoutSuccessHandler extends SimpleUrlLogoutSuccessHandler
     public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication)
       throws IOException, ServletException {
       logger.debug("LogsearchLogoutSuccessHandler ::: onLogoutSuccess");
-      response.sendRedirect("/login.html");
+      response.sendRedirect("/index.html");
   }
 }

+ 1 - 1
ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/web/filters/LogsearchAuthenticationEntryPoint.java

@@ -28,7 +28,7 @@ import org.apache.log4j.Logger;
 import org.springframework.security.core.AuthenticationException;
 import org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint;
 
-class LogsearchAuthenticationEntryPoint extends LoginUrlAuthenticationEntryPoint {
+public class LogsearchAuthenticationEntryPoint extends LoginUrlAuthenticationEntryPoint {
   private static final Logger logger = Logger.getLogger(LogsearchAuthenticationEntryPoint.class);
 
   public LogsearchAuthenticationEntryPoint(String loginFormUrl) {

+ 1 - 0
ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/web/filters/LogsearchKRBAuthenticationFilter.java

@@ -61,6 +61,7 @@ import org.apache.hadoop.security.authentication.server.KerberosAuthenticationHa
 import org.apache.hadoop.security.authentication.server.PseudoAuthenticationHandler;
 import org.apache.hadoop.security.authentication.util.KerberosName;
 import org.springframework.security.web.authentication.WebAuthenticationDetails;
+import org.springframework.stereotype.Component;
 
 public class LogsearchKRBAuthenticationFilter extends LogsearchKrbFilter {
   private static final Logger logger = LoggerFactory.getLogger(LogsearchKRBAuthenticationFilter.class);

+ 1 - 0
ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/web/filters/LogsearchSecurityContextFormationFilter.java

@@ -38,6 +38,7 @@ import org.apache.log4j.Logger;
 import org.springframework.security.authentication.AnonymousAuthenticationToken;
 import org.springframework.security.core.Authentication;
 import org.springframework.security.core.context.SecurityContextHolder;
+import org.springframework.stereotype.Component;
 import org.springframework.web.filter.GenericFilterBean;
 
 public class LogsearchSecurityContextFormationFilter extends GenericFilterBean {

+ 2 - 0
ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/web/filters/LogsearchUsernamePasswordAuthenticationFilter.java

@@ -20,11 +20,13 @@ package org.apache.ambari.logsearch.web.filters;
 
 import java.io.IOException;
 
+import javax.inject.Inject;
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
 import org.apache.log4j.Logger;
+import org.springframework.security.authentication.AuthenticationManager;
 import org.springframework.security.core.AuthenticationException;
 import org.springframework.security.web.authentication.RememberMeServices;
 import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;

+ 0 - 10
ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/web/security/LogsearchAbstractAuthenticationProvider.java

@@ -65,14 +65,4 @@ public abstract class LogsearchAbstractAuthenticationProvider implements Authent
     return isEnable;
   }
 
-  /**
-   * Check authentication provider is enable or disable
-   * 
-   * @return boolean
-   */
-  public boolean isEnable() {
-    // default is disabled
-    return false;
-  }
-
 }

+ 6 - 7
ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/web/security/LogsearchAuthenticationProvider.java

@@ -26,7 +26,6 @@ import org.apache.log4j.Logger;
 import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
 import org.springframework.security.core.Authentication;
 import org.springframework.security.core.AuthenticationException;
-import org.springframework.security.core.userdetails.UserDetailsService;
 import org.springframework.security.web.authentication.WebAuthenticationDetails;
 import org.springframework.stereotype.Component;
 
@@ -41,19 +40,19 @@ public class LogsearchAuthenticationProvider extends
     .getLogger("org.apache.ambari.logsearch.audit");
 
   @Inject
-  UserDao userDao;
+  private UserDao userDao;
 
   @Inject
-  LogsearchLdapAuthenticationProvider ldapAuthenticationProvider;
+  private LogsearchLdapAuthenticationProvider ldapAuthenticationProvider;
 
   @Inject
-  LogsearchFileAuthenticationProvider fileAuthenticationProvider;
+  private LogsearchFileAuthenticationProvider fileAuthenticationProvider;
 
   @Inject
-  LogsearchSimpleAuthenticationProvider simpleAuthenticationProvider;
+  private LogsearchSimpleAuthenticationProvider simpleAuthenticationProvider;
 
   @Inject
-  LogsearchExternalServerAuthenticationProvider externalServerAuthenticationProvider;
+  private LogsearchExternalServerAuthenticationProvider externalServerAuthenticationProvider;
 
   @Override
   public Authentication authenticate(Authentication authentication)
@@ -128,7 +127,7 @@ public class LogsearchAuthenticationProvider extends
       authentication = fileAuthenticationProvider.authenticate(authentication);
     } else if (authMethod.equals(AUTH_METHOD.SIMPLE)) {
       authentication = simpleAuthenticationProvider.authenticate(authentication);
-    }else if (authMethod.equals(AUTH_METHOD.EXTERNAL_AUTH)) {
+    } else if (authMethod.equals(AUTH_METHOD.EXTERNAL_AUTH)) {
       authentication = externalServerAuthenticationProvider.authenticate(authentication);
     } else {
       logger.error("Invalid authentication method :" + authMethod.name());

+ 1 - 11
ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/web/security/LogsearchExternalServerAuthenticationProvider.java

@@ -21,7 +21,6 @@ package org.apache.ambari.logsearch.web.security;
 import java.util.ArrayList;
 import java.util.List;
 
-import javax.annotation.PostConstruct;
 import javax.inject.Inject;
 
 import org.apache.ambari.logsearch.common.ExternalServerClient;
@@ -114,7 +113,7 @@ public class LogsearchExternalServerAuthenticationProvider extends
   @Override
   public Authentication authenticate(Authentication authentication)
       throws AuthenticationException {
-    if (!this.isEnable()) {
+    if (!authConfig.isAuthExternalEnabled()) {
       LOG.debug("external server auth is disabled.");
       return authentication;
     }
@@ -173,13 +172,4 @@ public class LogsearchExternalServerAuthenticationProvider extends
     }
     return false;
   }
-
-  /**
-   * Return true/false based on EXTERNAL_AUTH authentication method is
-   * enabled/disabled return boolean
-   */
-  @Override
-  public boolean isEnable() {
-    return isEnable(AUTH_METHOD.EXTERNAL_AUTH);
-  }
 }

+ 5 - 6
ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/web/security/LogsearchFileAuthenticationProvider.java

@@ -20,6 +20,7 @@ package org.apache.ambari.logsearch.web.security;
 
 import java.util.Collection;
 
+import org.apache.ambari.logsearch.conf.AuthConfig;
 import org.apache.ambari.logsearch.util.CommonUtil;
 import org.apache.commons.lang.StringEscapeUtils;
 import org.apache.commons.lang.StringUtils;
@@ -40,12 +41,15 @@ public class LogsearchFileAuthenticationProvider extends LogsearchAbstractAuthen
 
   private static Logger logger = Logger.getLogger(LogsearchFileAuthenticationProvider.class);
 
+  @Inject
+  private AuthConfig authConfig;
+
   @Inject
   private UserDetailsService userDetailsService;
 
   @Override
   public Authentication authenticate(Authentication authentication) throws AuthenticationException {
-    if (!this.isEnable()) {
+    if (!authConfig.isAuthFileEnabled()) {
       logger.debug("File auth is disabled.");
       return authentication;
     }
@@ -80,9 +84,4 @@ public class LogsearchFileAuthenticationProvider extends LogsearchAbstractAuthen
     authentication = new UsernamePasswordAuthenticationToken(username, encPassword, authorities);
     return authentication;
   }
-
-  @Override
-  public boolean isEnable() {
-    return isEnable(AUTH_METHOD.FILE);
-  }
 }

+ 14 - 8
ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/web/security/LogsearchLdapAuthenticationProvider.java

@@ -20,6 +20,7 @@ package org.apache.ambari.logsearch.web.security;
 
 import java.util.List;
 
+import org.apache.ambari.logsearch.conf.AuthConfig;
 import org.apache.log4j.Logger;
 import org.springframework.ldap.CommunicationException;
 import org.springframework.ldap.core.support.LdapContextSource;
@@ -31,6 +32,9 @@ import org.springframework.security.ldap.authentication.LdapAuthenticationProvid
 import org.springframework.security.ldap.search.FilterBasedLdapUserSearch;
 import org.springframework.stereotype.Component;
 
+import javax.annotation.PostConstruct;
+import javax.inject.Inject;
+
 @Component
 public class LogsearchLdapAuthenticationProvider extends
   LogsearchAbstractAuthenticationProvider {
@@ -42,9 +46,16 @@ public class LogsearchLdapAuthenticationProvider extends
   private static LdapAuthenticationProvider ldapAuthProvider = null;
   private String logStatement = "";
 
+  @Inject
+  private AuthConfig authConfig;
+
   public LogsearchLdapAuthenticationProvider() {
+  }
+
+  @PostConstruct
+  public void postConstruct() {
     logger.debug("Creating object of ldap auth provider ");
-    if (this.isEnable()) {
+    if (authConfig.isAuthLdapEnabled()) {
       ldapAuthProvider = loadLdapAuthenticationProvider();
     } else {
       logger.info("Ldap auth is disabled");
@@ -54,7 +65,7 @@ public class LogsearchLdapAuthenticationProvider extends
   @Override
   public Authentication authenticate(Authentication authentication)
     throws AuthenticationException {
-    if (!this.isEnable()) {
+    if (!authConfig.isAuthLdapEnabled()) {
       logger.debug("Ldap auth is disabled");
       return authentication;
     }
@@ -98,7 +109,7 @@ public class LogsearchLdapAuthenticationProvider extends
    *
    * @return corresponding LDAP authentication provider
    */
-  LdapAuthenticationProvider loadLdapAuthenticationProvider() {
+  private LdapAuthenticationProvider loadLdapAuthenticationProvider() {
     if (reloadLdapServerProperties()) {
       logger.info("LDAP Properties changed - rebuilding Context");
       LdapContextSource springSecurityContextSource = new LdapContextSource();
@@ -173,9 +184,4 @@ public class LogsearchLdapAuthenticationProvider extends
     return false;
   }
 
-  @Override
-  public boolean isEnable() {
-    return isEnable(AUTH_METHOD.LDAP);
-  }
-
 }

+ 1 - 63
ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/web/security/LogsearchLdapBindAuthenticator.java

@@ -40,69 +40,7 @@ public class LogsearchLdapBindAuthenticator extends BindAuthenticator {
 
   @Override
   public DirContextOperations authenticate(Authentication authentication) {
-
-    DirContextOperations user = super.authenticate(authentication);
-
-    return setAmbariAdminAttr(user);
-  }
-
-  /**
-   * Checks whether user is a member of ambari administrators group in LDAP.
-   * If yes, sets user's ambari_admin attribute to true
-   *
-   * @param user
-   * @return
-   */
-  private DirContextOperations setAmbariAdminAttr(DirContextOperations user) {
-    String baseDn = ldapServerProperties.getBaseDN().toLowerCase();
-    String groupBase = ldapServerProperties.getGroupBase().toLowerCase();
-    String groupObjectClass = ldapServerProperties.getGroupObjectClass();
-    String groupMembershipAttr = ldapServerProperties
-      .getGroupMembershipAttr();
-    String adminGroupMappingRules = ldapServerProperties
-      .getAdminGroupMappingRules();
-    final String groupNamingAttribute = ldapServerProperties
-      .getGroupNamingAttr();
-    String groupSearchFilter = ldapServerProperties.getGroupSearchFilter();
-
-    // If groupBase is set incorrectly or isn't set - search in BaseDn
-    int indexOfBaseDn = groupBase.indexOf(baseDn);
-    groupBase = indexOfBaseDn <= 0 ? "" : groupBase.substring(0,
-      indexOfBaseDn - 1);
-
-    StringBuilder filterBuilder = new StringBuilder();
-
-    filterBuilder.append("(&(");
-    filterBuilder.append(groupMembershipAttr);
-    filterBuilder.append("=");
-    filterBuilder.append(user.getNameInNamespace());// DN
-
-    if ((groupSearchFilter == null) || groupSearchFilter.equals("")) {
-      // If groupSearchFilter is not specified, build it from other
-      // authorization
-      // group properties
-      filterBuilder.append(")(objectclass=");
-      filterBuilder.append(groupObjectClass);
-      filterBuilder.append(")(|");
-      String[] adminGroupMappingRegexs = adminGroupMappingRules
-        .split(",");
-      for (String adminGroupMappingRegex : adminGroupMappingRegexs) {
-        filterBuilder.append("(");
-        filterBuilder.append(groupNamingAttribute);
-        filterBuilder.append("=");
-        filterBuilder.append(adminGroupMappingRegex);
-        filterBuilder.append(")");
-      }
-      filterBuilder.append(")");
-    } else {
-      filterBuilder.append(")");
-      filterBuilder.append(groupSearchFilter);
-    }
-    filterBuilder.append(")");
-
-    logger.info("filter=" + filterBuilder);
-    // TODO: Filter is not used anywhere
-    return user;
+    return super.authenticate(authentication);
   }
 
 }

+ 7 - 6
ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/web/security/LogsearchSimpleAuthenticationProvider.java

@@ -18,6 +18,7 @@
  */
 package org.apache.ambari.logsearch.web.security;
 
+import org.apache.ambari.logsearch.conf.AuthConfig;
 import org.apache.ambari.logsearch.web.model.User;
 import org.apache.commons.lang.StringEscapeUtils;
 import org.apache.commons.lang.StringUtils;
@@ -28,14 +29,19 @@ import org.springframework.security.core.Authentication;
 import org.springframework.security.core.AuthenticationException;
 import org.springframework.stereotype.Component;
 
+import javax.inject.Inject;
+
 @Component
 public class LogsearchSimpleAuthenticationProvider extends LogsearchAbstractAuthenticationProvider {
 
   private static Logger logger = Logger.getLogger(LogsearchSimpleAuthenticationProvider.class);
 
+  @Inject
+  private AuthConfig authConfig;
+
   @Override
   public Authentication authenticate(Authentication authentication) throws AuthenticationException {
-    if (!this.isEnable()) {
+    if (!authConfig.isAuthSimpleEnabled()) {
       logger.debug("Simple auth is disabled");
       return authentication;
     }
@@ -64,9 +70,4 @@ public class LogsearchSimpleAuthenticationProvider extends LogsearchAbstractAuth
       return false;
     }
   }
-
-  @Override
-  public boolean isEnable() {
-    return this.isEnable(AUTH_METHOD.SIMPLE);
-  }
 }

+ 3 - 3
ambari-logsearch/ambari-logsearch-portal/src/main/resources/log4j.xml

@@ -57,7 +57,7 @@
 
  <appender name="rolling_file_json"
   class="org.apache.ambari.logsearch.appender.LogsearchRollingFileAppender">
-  <param name="file" value="logs/logsearch-app.json" />
+  <param name="file" value="target/logs/logsearch-app.json" />
   <param name="Threshold" value="info" />
   <param name="append" value="true" />
   <param name="maxFileSize" value="10MB" />
@@ -67,7 +67,7 @@
 
   <appender name="audit_rolling_file_json"
     class="org.apache.ambari.logsearch.appender.LogsearchRollingFileAppender">
-    <param name="file" value="logs/logsearch-audit.json" />
+    <param name="file" value="target/logs/logsearch-audit.json" />
     <param name="Threshold" value="info" />
     <param name="append" value="true" />
     <param name="maxFileSize" value="10MB" />
@@ -77,7 +77,7 @@
 
   <appender name="performance_analyzer_json"
     class="org.apache.ambari.logsearch.appender.LogsearchRollingFileAppender">
-    <param name="file" value="logs/logsearch-performance.json" />
+    <param name="file" value="target/logs/logsearch-performance.json" />
     <param name="Threshold" value="info" />
     <param name="append" value="true" />
     <param name="maxFileSize" value="10MB" />

+ 0 - 83
ambari-logsearch/ambari-logsearch-portal/src/main/webapp/META-INF/security-applicationContext.xml

@@ -1,83 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  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.
--->
-<beans:beans xmlns="http://www.springframework.org/schema/security"
-xmlns:beans="http://www.springframework.org/schema/beans"
-xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-xmlns:security="http://www.springframework.org/schema/security"
-xsi:schemaLocation="http://www.springframework.org/schema/beans
-http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
-http://www.springframework.org/schema/security
-http://www.springframework.org/schema/security/spring-security-4.0.xsd">
-  
-    <security:http pattern="/login.html" security="none" />
-    <security:http pattern="/styles/**" security="none" />
-    <security:http pattern="/fonts/**" security="none" />
-    <security:http pattern="/scripts/**" security="none" />
-    <security:http pattern="/libs/**" security="none" />
-    <security:http pattern="/images/**" security="none" />
-    <security:http pattern="/templates/**" security="none" />
-    <security:http pattern="/favicon.ico" security="none" />
-    <security:http pattern="/api/v1/public/**" security="none" />
-    <security:http pattern="/api/v1/swagger.json" security="none"/>
-    <security:http pattern="/api/v1/swagger.yaml" security="none"/>
-  	
-	<security:http disable-url-rewriting="true" use-expressions="true" create-session="always" entry-point-ref="authenticationProcessingFilterEntryPoint">
-		<csrf disabled="true"/> 
-		<security:session-management session-fixation-protection="newSession" />
-		<intercept-url pattern="/**" access="isAuthenticated()"/>       
-        <security:custom-filter ref="krbAuthenticationFilter" after="FIRST" />
-		<security:custom-filter position="FORM_LOGIN_FILTER" ref="logsearchUsernamePasswordAuthenticationFilter"/>
-		<security:custom-filter position="LAST" ref="userContextFormationFilter"/>
-		<security:logout delete-cookies="JSESSIONID" logout-url="/logout.html" success-handler-ref="logsearchLogoutSuccessHandler" />
-		<http-basic entry-point-ref="authenticationProcessingFilterEntryPoint"/>
-	</security:http>
-
-	<beans:bean id="userContextFormationFilter" class="org.apache.ambari.logsearch.web.filters.LogsearchSecurityContextFormationFilter"/>
-
-    <beans:bean id="krbAuthenticationFilter" class="org.apache.ambari.logsearch.web.filters.LogsearchKRBAuthenticationFilter"/>
-  
-	<beans:bean id="logsearchUsernamePasswordAuthenticationFilter" class="org.apache.ambari.logsearch.web.filters.LogsearchUsernamePasswordAuthenticationFilter">
-		<beans:property name="authenticationManager" ref="authenticationManager"/>
-		<beans:property name="authenticationSuccessHandler" ref="authSuccessHandler"/>
-		<beans:property name="authenticationFailureHandler"	ref="authFailureHandler"/>
-	</beans:bean>
-  
-	<beans:bean id="authenticationProcessingFilterEntryPoint" class="org.apache.ambari.logsearch.web.filters.LogsearchAuthenticationEntryPoint">
-		<beans:constructor-arg index="0" value="/login.html"/>
-		<beans:property name="forceHttps" value="false"/>
-	</beans:bean>
-
-	<beans:bean id="authSuccessHandler" class="org.apache.ambari.logsearch.web.authenticate.LogsearchAuthSuccessHandler">
-	</beans:bean>
-
-	<beans:bean id="authFailureHandler" class="org.apache.ambari.logsearch.web.authenticate.LogsearchAuthFailureHandler">
-	</beans:bean>
-
-	<beans:bean id="logsearchLogoutSuccessHandler" class="org.apache.ambari.logsearch.web.authenticate.LogsearchLogoutSuccessHandler">
-	</beans:bean>
-	
-	 <beans:bean id="logsearchAuthenticationProvider" class="org.apache.ambari.logsearch.web.security.LogsearchAuthenticationProvider" >
- 	</beans:bean>
-
-	<security:authentication-manager alias="authenticationManager">
-         <security:authentication-provider ref="logsearchAuthenticationProvider"/>
-	</security:authentication-manager>
-	
-	<beans:bean id="securityEventListener" class ="org.apache.ambari.logsearch.web.listeners.SpringEventListener"/>
-	
-</beans:beans>

+ 0 - 62
ambari-logsearch/ambari-logsearch-portal/src/main/webapp/WEB-INF/web.xml

@@ -1,62 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  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.
--->
-<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
-
-  <listener>
-    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
-  </listener>
-  <context-param>
-    <param-name>contextClass</param-name>
-    <param-value>
-      org.springframework.web.context.support.AnnotationConfigWebApplicationContext
-    </param-value>
-  </context-param>
-  <context-param>
-    <param-name>contextConfigLocation</param-name>
-    <param-value>org.apache.ambari.logsearch.conf.ApplicationConfig</param-value>
-  </context-param>
-
-	<listener>
-		<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
-	</listener>
-	<filter>
-		<filter-name>springSecurityFilterChain</filter-name>
-		<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
-	</filter>
-
-	<filter-mapping>
-		<filter-name>springSecurityFilterChain</filter-name>
-		<url-pattern>/*</url-pattern>
-	</filter-mapping>
-  
-	<!-- Servlet mapping for REST -->
-	<servlet>
-		<servlet-name>REST service</servlet-name>
-		<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
-		<init-param>
-			<param-name>jersey.config.server.provider.packages</param-name>
-			<param-value>org.apache.ambari.logsearch.rest,io.swagger.jaxrs.listing</param-value>
-		</init-param>
-		<load-on-startup>1</load-on-startup>
-	</servlet>
-	  <servlet-mapping>
-		<servlet-name>REST service</servlet-name>
-		<url-pattern>/api/v1/*</url-pattern>
-	</servlet-mapping>
-
-</web-app>

+ 2 - 1
ambari-logsearch/docker/test-config/logfeeder/logfeeder.properties

@@ -21,7 +21,8 @@ logfeeder.config.files=shipper-conf/global.config.json,\
   shipper-conf/input.config-logsearch.json,\
   shipper-conf/input.config-hst.json,\
   shipper-conf/input.config-system_message.json,\
-  shipper-conf/input.config-secure_log.json
+  shipper-conf/input.config-secure_log.json,\
+  shipper-conf/input.config-hdfs.json
 logfeeder.log.filter.enable=true
 logfeeder.solr.config.interval=5
 logfeeder.solr.core.config.name=history

+ 172 - 0
ambari-logsearch/docker/test-config/logfeeder/shipper-conf/input.config-hdfs.json

@@ -0,0 +1,172 @@
+{
+  "input": [
+    {
+      "type": "hdfs_audit",
+      "rowtype": "audit",
+      "is_enabled": "true",
+      "add_fields": {
+        "logType": "HDFSAudit",
+        "enforcer": "hadoop-acl",
+        "repoType": "1",
+        "repo": "hdfs"
+      },
+      "path": "/root/test-logs/hdfs-audit/hdfs-audit.log"
+    }
+  ],
+  "filter": [
+    {
+      "filter":"grok",
+      "conditions":{
+        "fields":{
+          "type":[
+            "hdfs_audit"
+          ]
+
+        }
+
+      },
+      "log4j_format":"%d{ISO8601} %-5p %c{2} (%F:%M(%L)) - %m%n",
+      "multiline_pattern":"^(%{TIMESTAMP_ISO8601:evtTime})",
+      "message_pattern":"(?m)^%{TIMESTAMP_ISO8601:evtTime}%{SPACE}%{LOGLEVEL:level}%{SPACE}%{JAVACLASS:logger_name}:%{SPACE}%{GREEDYDATA:log_message}",
+      "post_map_values":{
+        "evtTime":{
+          "map_date":{
+            "target_date_pattern":"yyyy-MM-dd HH:mm:ss,SSS"
+          }
+
+        }
+
+      }
+
+    },
+    {
+      "filter":"keyvalue",
+      "sort_order":1,
+      "conditions":{
+        "fields":{
+          "type":[
+            "hdfs_audit"
+          ]
+
+        }
+
+      },
+      "source_field":"log_message",
+      "value_split":"=",
+      "field_split":"\t",
+      "post_map_values":{
+        "src":{
+          "map_fieldname":{
+            "new_fieldname":"resource"
+          }
+
+        },
+        "ip":{
+          "map_fieldname":{
+            "new_fieldname":"cliIP"
+          }
+
+        },
+        "allowed":[
+          {
+            "map_fieldvalue":{
+              "pre_value":"true",
+              "post_value":"1"
+            }
+
+          },
+          {
+            "map_fieldvalue":{
+              "pre_value":"false",
+              "post_value":"0"
+            }
+
+          },
+          {
+            "map_fieldname":{
+              "new_fieldname":"result"
+            }
+
+          }
+
+        ],
+        "cmd":{
+          "map_fieldname":{
+            "new_fieldname":"action"
+          }
+
+        },
+        "proto":{
+          "map_fieldname":{
+            "new_fieldname":"cliType"
+          }
+
+        },
+        "callerContext":{
+          "map_fieldname":{
+            "new_fieldname":"req_caller_id"
+          }
+
+        }
+
+      }
+
+    },
+    {
+      "filter":"grok",
+      "sort_order":2,
+      "source_field":"ugi",
+      "remove_source_field":"false",
+      "conditions":{
+        "fields":{
+          "type":[
+            "hdfs_audit"
+          ]
+
+        }
+
+      },
+      "message_pattern":"%{USERNAME:p_user}.+auth:%{USERNAME:p_authType}.+via %{USERNAME:k_user}.+auth:%{USERNAME:k_authType}|%{USERNAME:user}.+auth:%{USERNAME:authType}|%{USERNAME:x_user}",
+      "post_map_values":{
+        "user":{
+          "map_fieldname":{
+            "new_fieldname":"reqUser"
+          }
+
+        },
+        "x_user":{
+          "map_fieldname":{
+            "new_fieldname":"reqUser"
+          }
+
+        },
+        "p_user":{
+          "map_fieldname":{
+            "new_fieldname":"reqUser"
+          }
+
+        },
+        "k_user":{
+          "map_fieldname":{
+            "new_fieldname":"proxyUsers"
+          }
+
+        },
+        "p_authType":{
+          "map_fieldname":{
+            "new_fieldname":"authType"
+          }
+
+        },
+        "k_authType":{
+          "map_fieldname":{
+            "new_fieldname":"proxyAuthType"
+          }
+
+        }
+
+      }
+
+    }
+  ]
+}

+ 4 - 0
ambari-logsearch/docker/test-logs/hdfs-audit/hdfs-audit.log

@@ -0,0 +1,4 @@
+2016-03-18 10:00:47,252 INFO FSNamesystem.audit: allowed=true	ugi=ambari-qa (auth:SIMPLE)	ip=/192.168.64.102	cmd=getfileinfo	src=/ats/active	dst=null	perm=null	proto=rpc	callerContext=HIVE_QUERY_ID:ambari-qa_20160317200111_223b3079-4a2d-431c-920f-6ba37ed63e9f
+2016-03-18 10:00:48,939 INFO FSNamesystem.audit: allowed=true	ugi=ambari-qa (auth:SIMPLE)	ip=/192.168.64.102	cmd=delete	src=/tmp/hive/ambari-qa/resource1	dst=null	perm=null	proto=rpc
+2016-03-18 10:00:49,242 INFO FSNamesystem.audit: allowed=true	ugi=ambari-qa (auth:SIMPLE)	ip=/192.168.64.102	cmd=getfileinfo	src=/tmp/hive/ambari-qa/resource2	dst=null	perm=null	proto=rpc
+2016-03-18 10:00:49,277 INFO FSNamesystem.audit: allowed=true	ugi=ambari-qa (auth:SIMPLE)	ip=/192.168.64.102	cmd=getfileinfo	src=/tmp/hive/ambari-qa/resource2	dst=null	perm=null	proto=rpc