[ 
https://issues.apache.org/jira/browse/AMBARI-23456?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16708615#comment-16708615
 ] 

ASF GitHub Bot commented on AMBARI-23456:
-----------------------------------------

oleewere closed pull request #53: AMBARI-23456. Generate markdown docs from 
internal annotations.
URL: https://github.com/apache/ambari-logsearch/pull/53
 
 
   

This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:

As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):

diff --git a/Makefile b/Makefile
index 5f9c8b0f0a..cfeaada1d6 100644
--- a/Makefile
+++ b/Makefile
@@ -46,6 +46,12 @@ rpm:
 deb:
        $(MAVEN_BINARY) clean package -Dbuild-deb -DskipTests 
-Djdk.version=$(LOGSEARCH_JAVA_VERSION)
 
+prop-docs: install
+       $(MAVEN_BINARY) -pl ambari-logsearch-docs exec:java -DskipTests 
-Djdk.version=$(LOGSEARCH_JAVA_VERSION)
+
+prop-docs-only:
+       $(MAVEN_BINARY) -pl ambari-logsearch-docs clean package exec:java 
-DskipTests -Djdk.version=$(LOGSEARCH_JAVA_VERSION)
+
 update-version:
        $(MAVEN_BINARY) versions:set-property -Dproperty=revision 
-DnewVersion=$(new-version) -DgenerateBackupPoms=false
 
diff --git a/ambari-logsearch-docs/pom.xml b/ambari-logsearch-docs/pom.xml
new file mode 100644
index 0000000000..f43117c40a
--- /dev/null
+++ b/ambari-logsearch-docs/pom.xml
@@ -0,0 +1,87 @@
+<?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.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0";
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd";>
+  <parent>
+    <artifactId>ambari-logsearch</artifactId>
+    <groupId>org.apache.ambari</groupId>
+    <version>${revision}</version>
+  </parent>
+  <modelVersion>4.0.0</modelVersion>
+  <packaging>jar</packaging>
+  <url>http://maven.apache.org</url>
+  <name>Ambari Logsearch Docs</name>
+  <artifactId>ambari-logsearch-docs</artifactId>
+  <build>
+    <resources>
+      <resource>
+        <directory>src/main/resources</directory>
+        <filtering>true</filtering>
+      </resource>
+    </resources>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-compiler-plugin</artifactId>
+        <configuration>
+          <source>${jdk.version}</source>
+          <target>${jdk.version}</target>
+        </configuration>
+      </plugin>
+      <plugin>
+        <groupId>org.codehaus.mojo</groupId>
+        <artifactId>exec-maven-plugin</artifactId>
+        <version>1.2.1</version>
+        <executions>
+          <execution>
+            <goals>
+              <goal>java</goal>
+            </goals>
+          </execution>
+        </executions>
+        <configuration>
+          
<mainClass>org.apache.ambari.logsearch.doc.LogSearchMarkdownGenerator</mainClass>
+          <arguments>
+            <argument>--output-dir</argument>
+            <argument>${project.basedir}/../docs</argument>
+          </arguments>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.apache.logging.log4j</groupId>
+      <artifactId>log4j-api</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.ambari</groupId>
+      <artifactId>ambari-logsearch-logfeeder</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.ambari</groupId>
+      <artifactId>ambari-logsearch-server</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+  </dependencies>
+
+
+</project>
\ No newline at end of file
diff --git 
a/ambari-logsearch-docs/src/main/java/org/apache/ambari/logsearch/doc/AbstractDescriptionData.java
 
b/ambari-logsearch-docs/src/main/java/org/apache/ambari/logsearch/doc/AbstractDescriptionData.java
new file mode 100644
index 0000000000..e95d2eaa5c
--- /dev/null
+++ 
b/ambari-logsearch-docs/src/main/java/org/apache/ambari/logsearch/doc/AbstractDescriptionData.java
@@ -0,0 +1,68 @@
+/*
+ * 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.doc;
+
+public abstract class AbstractDescriptionData {
+
+  private final String description;
+  private final String defaultValue;
+  private final String examples;
+
+  public AbstractDescriptionData(String description, String defaultStr, 
String[] examplesArr) {
+    this.description = description;
+    examples = generateExamplesString(examplesArr);
+    defaultValue = generateDefaultValue(defaultStr);
+  }
+
+  protected String generateDefaultValue(String defaultValue) {
+    if (defaultValue == null || defaultValue.length() == 0) {
+      return "`EMPTY`";
+    } else {
+      return defaultValue;
+    }
+  }
+
+  protected String generateExamplesString(String[] examples) {
+    if (examples == null) {
+      return "";
+    } else {
+      final StringBuilder stringBuilder = new StringBuilder();
+      if(examples.length > 0){
+        stringBuilder.append("<ul>");
+        for( String example : examples){
+          
stringBuilder.append("<li>").append("`").append(example).append("`").append("</li>");
+        }
+        stringBuilder.append("</ul>");
+      }
+      return stringBuilder.toString();
+    }
+  }
+
+  public String getDescription() {
+    return description;
+  }
+
+  public String getDefaultValue() {
+    return defaultValue;
+  }
+
+  public String getExamples() {
+    return examples;
+  }
+}
diff --git 
a/ambari-logsearch-docs/src/main/java/org/apache/ambari/logsearch/doc/LogSearchMarkdownGenerator.java
 
b/ambari-logsearch-docs/src/main/java/org/apache/ambari/logsearch/doc/LogSearchMarkdownGenerator.java
new file mode 100644
index 0000000000..c75131f840
--- /dev/null
+++ 
b/ambari-logsearch-docs/src/main/java/org/apache/ambari/logsearch/doc/LogSearchMarkdownGenerator.java
@@ -0,0 +1,214 @@
+/*
+ * 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.doc;
+
+import freemarker.template.Configuration;
+import freemarker.template.Template;
+import org.apache.ambari.logsearch.config.api.LogSearchPropertyDescription;
+import org.apache.ambari.logsearch.config.api.ShipperConfigElementDescription;
+import org.apache.commons.cli.CommandLine;
+import org.apache.commons.cli.CommandLineParser;
+import org.apache.commons.cli.DefaultParser;
+import org.apache.commons.cli.Option;
+import org.apache.commons.cli.Options;
+import org.apache.commons.io.FileUtils;
+import org.reflections.Reflections;
+import org.reflections.scanners.FieldAnnotationsScanner;
+import org.reflections.scanners.MethodAnnotationsScanner;
+import org.springframework.core.io.ClassPathResource;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.StringWriter;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.nio.charset.Charset;
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.stream.Collectors;
+
+public class LogSearchMarkdownGenerator {
+
+  private static final String SHIPPER_CONFIG_TEMPLATE_KEY = "shipperConfigs";
+  private static final String LOGSEARCH_PROPERTIES_TEMPLATE_KEY = 
"logsearchProperties";
+  private static final String LOGFEEDER_PROPERTIES_TEMPLATE_KEY = 
"logfeederProperties";
+
+  private static final String OUTPUT_DIR_OPTION = "output-dir";
+
+  private static final String LOGSEARCH_PACKAGE = 
"org.apache.ambari.logsearch";
+  private static final String LOGFEEDER_PACKAGE = 
"org.apache.ambari.logfeeder";
+  private static final String CONFIG_API_PACKAGE = 
"org.apache.ambari.logsearch.config.json.model.inputconfig.impl";
+
+  private static final String TEMPLATES_FOLDER = "templates";
+
+  private static final String LOGSEARCH_PROPERTIES = "logsearch.properties";
+  private static final String LOGSEARCH_PROPERTIES_MARKDOWN_TEMPLATE_FILE = 
"logsearch_properties.md.ftl";
+  private static final String LOGSEARCH_PROPERTIES_MARKDOWN_OUTPUT = 
"logsearch_properties.md";
+
+  private static final String LOGFEEDER_PROPERTIES = "logfeeder.properties";
+  private static final String LOGFEEDER_PROPERTIES_MARKDOWN_TEMPLATE_FILE = 
"logfeeder_properties.md.ftl";
+  private static final String LOGFEEDER_PROPERTIES_MARKDOWN_OUTPUT = 
"logfeeder_properties.md";
+
+  private static final String SHIPPER_CONFIGURATIONS_MARKDOWN_TEMPLATE_FILE = 
"shipper_configurations.md.ftl";
+  private static final String SHIPPER_CONFIGURATIONS_MARKDOWN_OUTPUT = 
"shipper_configurations.md";
+
+
+  public static void main(String[] args) {
+    try {
+      Options options = new Options();
+      options.addOption(Option.builder()
+        .desc("Output folder of the markdowns")
+        .longOpt(OUTPUT_DIR_OPTION)
+        .hasArg()
+        .required()
+        .type(String.class)
+        .build());
+      CommandLineParser parser = new DefaultParser();
+      CommandLine cmdLine = parser.parse(options, args);
+
+      String outputDir = cmdLine.getOptionValue(OUTPUT_DIR_OPTION);
+      File outputFileDir = new File(outputDir);
+      if (!outputFileDir.exists() || !outputFileDir.isDirectory()) {
+        throw new FileNotFoundException(String.format("Directory '%s' does not 
exist", outputDir));
+      }
+
+      final Map<String, List<PropertyDescriptionData>> propertyDescriptions = 
new ConcurrentHashMap<>();
+      final List<String> configPackagesToScan = 
Arrays.asList(LOGSEARCH_PACKAGE, LOGFEEDER_PACKAGE);
+      fillPropertyDescriptions(propertyDescriptions, configPackagesToScan);
+      System.out.println(String.format("Number of logsearch.properties 
configuration descriptors found: %d", 
propertyDescriptions.get(LOGSEARCH_PROPERTIES).size()));
+      System.out.println(String.format("Number of logfeeder.properties 
configuration descriptors found: %d", 
propertyDescriptions.get(LOGFEEDER_PROPERTIES).size()));
+
+      final List<String> shipperConfigPackagesToScan = 
Collections.singletonList(CONFIG_API_PACKAGE);
+      ShipperConfigDescriptionDataHolder shipperConfigDescriptionDataHolder = 
createShipperConfigDescriptions(shipperConfigPackagesToScan);
+
+      System.out.println(String.format("Number of top level section shipper 
descriptors found: %d", 
shipperConfigDescriptionDataHolder.getTopLevelConfigSections().size()));
+      System.out.println(String.format("Number of input config section shipper 
descriptors found: %d", 
shipperConfigDescriptionDataHolder.getInputConfigSections().size()));
+      System.out.println(String.format("Number of filter config section 
shipper descriptors found: %d", 
shipperConfigDescriptionDataHolder.getFilterConfigSections().size()));
+      System.out.println(String.format("Number of mapper section shipper 
descriptors found: %d", 
shipperConfigDescriptionDataHolder.getPostMapValuesConfigSections().size()));
+
+      final Configuration freemarkerConfiguration = new Configuration();
+      final ClassPathResource cpr = new ClassPathResource(TEMPLATES_FOLDER);
+      freemarkerConfiguration.setDirectoryForTemplateLoading(cpr.getFile());
+
+      final Map<String, Object> logsearchModels = new HashMap<>();
+      logsearchModels.put(LOGSEARCH_PROPERTIES_TEMPLATE_KEY, 
propertyDescriptions.get(LOGSEARCH_PROPERTIES));
+      File logsearchPropertiesOutputFile = 
Paths.get(outputDir,LOGSEARCH_PROPERTIES_MARKDOWN_OUTPUT).toFile();
+      writeMarkdown(freemarkerConfiguration, 
LOGSEARCH_PROPERTIES_MARKDOWN_TEMPLATE_FILE, logsearchModels, 
logsearchPropertiesOutputFile);
+
+      final Map<String, Object> logfeederModels = new HashMap<>();
+      logfeederModels.put(LOGFEEDER_PROPERTIES_TEMPLATE_KEY, 
propertyDescriptions.get(LOGFEEDER_PROPERTIES));
+      File logfeederPropertiesOutputFile = Paths.get(outputDir, 
LOGFEEDER_PROPERTIES_MARKDOWN_OUTPUT).toFile();
+      writeMarkdown(freemarkerConfiguration, 
LOGFEEDER_PROPERTIES_MARKDOWN_TEMPLATE_FILE, logfeederModels, 
logfeederPropertiesOutputFile);
+
+      final Map<String, Object> shipperConfigModels = new HashMap<>();
+      shipperConfigModels.put(SHIPPER_CONFIG_TEMPLATE_KEY, 
shipperConfigDescriptionDataHolder);
+
+      File shipperConfigsOutputFile = Paths.get(outputDir, 
SHIPPER_CONFIGURATIONS_MARKDOWN_OUTPUT).toFile();
+      writeMarkdown(freemarkerConfiguration, 
SHIPPER_CONFIGURATIONS_MARKDOWN_TEMPLATE_FILE, shipperConfigModels, 
shipperConfigsOutputFile);
+
+    } catch (Exception e) {
+      e.printStackTrace();
+      System.exit(1);
+    }
+  }
+
+  private static void writeMarkdown(Configuration freemarkerConfiguration, 
String templateName,
+                                    Map<String, Object> models, File 
outputFile) throws Exception {
+    final StringWriter stringWriter = new StringWriter();
+    final Template template = 
freemarkerConfiguration.getTemplate(templateName);
+    template.process(models, stringWriter);
+    FileUtils.writeStringToFile(outputFile, stringWriter.toString(), 
Charset.defaultCharset(), false);
+  }
+
+  private static void fillPropertyDescriptions(Map<String, 
List<PropertyDescriptionData>> propertyDescriptions, List<String> 
packagesToScan) {
+    List<PropertyDescriptionData> propertyDescriptionsList = 
getPropertyDescriptions(packagesToScan);
+    Map<String, List<PropertyDescriptionData>> mapToAdd = 
propertyDescriptionsList.stream()
+      .sorted(Comparator.comparing(PropertyDescriptionData::getName))
+      .collect(Collectors.groupingBy(PropertyDescriptionData::getSource));
+    propertyDescriptions.putAll(mapToAdd);
+  }
+
+  private static ShipperConfigDescriptionDataHolder 
createShipperConfigDescriptions(List<String> shipperConfigPackagesToScan) {
+    final List<ShipperConfigDescriptionData> shipperConfigDescription = new 
ArrayList<>();
+    Reflections reflections = new Reflections(shipperConfigPackagesToScan, new 
FieldAnnotationsScanner());
+    Set<Field> fields = 
reflections.getFieldsAnnotatedWith(ShipperConfigElementDescription.class);
+    for (Field field : fields) {
+      ShipperConfigElementDescription description = 
field.getAnnotation(ShipperConfigElementDescription.class);
+      shipperConfigDescription.add(new 
ShipperConfigDescriptionData(description.path(), description.description(),
+        description.examples(), description.defaultValue()));
+    }
+    
shipperConfigDescription.sort(Comparator.comparing(ShipperConfigDescriptionData::getPath));
+
+    final List<ShipperConfigDescriptionData> topLevelConfigSections = 
shipperConfigDescription.stream()
+      .filter(
+        s -> (s.getPath().equals("/filter") || s.getPath().equals("/input") || 
s.getPath().equals("/output")))
+      .distinct()
+      .collect(Collectors.toList());
+
+    final List<ShipperConfigDescriptionData> inputConfigSection = 
shipperConfigDescription.stream()
+      .filter(
+        s -> (s.getPath().startsWith("/input") && 
!s.getPath().equals("/input")))
+      .distinct()
+      .collect(Collectors.toList());
+
+    final List<ShipperConfigDescriptionData> filterConfigSection = 
shipperConfigDescription.stream()
+      .filter(
+        s -> (s.getPath().startsWith("/filter") && 
!s.getPath().equals("/filter") && 
!s.getPath().startsWith("/filter/[]/post_map_values")) || 
s.getPath().equals("/filter/[]/post_map_values"))
+      .distinct()
+      .collect(Collectors.toList());
+
+    final List<ShipperConfigDescriptionData> postMapValuesConfigSection = 
shipperConfigDescription.stream()
+      .filter(
+        s -> (s.getPath().startsWith("/filter/[]/post_map_values") && 
!s.getPath().equals("/filter/[]/post_map_values")))
+      .distinct()
+      .collect(Collectors.toList());
+
+    return new ShipperConfigDescriptionDataHolder(topLevelConfigSections, 
inputConfigSection, filterConfigSection, postMapValuesConfigSection);
+  }
+
+  private static List<PropertyDescriptionData> 
getPropertyDescriptions(List<String> packagesToScan) {
+    List<PropertyDescriptionData> result = new ArrayList<>();
+    for (String packageToScan : packagesToScan) {
+      Reflections reflections = new Reflections(packageToScan, new 
FieldAnnotationsScanner(), new MethodAnnotationsScanner());
+      Set<Field> fields = 
reflections.getFieldsAnnotatedWith(LogSearchPropertyDescription.class);
+      for (Field field : fields) {
+        LogSearchPropertyDescription propDescription = 
field.getAnnotation(LogSearchPropertyDescription.class);
+        for (String source : propDescription.sources()) {
+          result.add(new PropertyDescriptionData(propDescription.name(), 
propDescription.description(), propDescription.examples(), 
propDescription.defaultValue(), source));
+        }
+      }
+      Set<Method> methods = 
reflections.getMethodsAnnotatedWith(LogSearchPropertyDescription.class);
+      for (Method method : methods) {
+        LogSearchPropertyDescription propDescription = 
method.getAnnotation(LogSearchPropertyDescription.class);
+        for (String source : propDescription.sources()) {
+          result.add(new PropertyDescriptionData(propDescription.name(), 
propDescription.description(), propDescription.examples(), 
propDescription.defaultValue(), source));
+        }
+      }
+    }
+    return result;
+  }
+}
diff --git 
a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/response/PropertyDescriptionData.java
 
b/ambari-logsearch-docs/src/main/java/org/apache/ambari/logsearch/doc/PropertyDescriptionData.java
similarity index 71%
rename from 
ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/response/PropertyDescriptionData.java
rename to 
ambari-logsearch-docs/src/main/java/org/apache/ambari/logsearch/doc/PropertyDescriptionData.java
index 6da8403379..f1950dca32 100644
--- 
a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/response/PropertyDescriptionData.java
+++ 
b/ambari-logsearch-docs/src/main/java/org/apache/ambari/logsearch/doc/PropertyDescriptionData.java
@@ -16,27 +16,19 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.ambari.logsearch.model.response;
+package org.apache.ambari.logsearch.doc;
 
 import com.fasterxml.jackson.annotation.JsonIgnore;
 
-public class PropertyDescriptionData {
-  private final String name;
-
-  private final String description;
-
-  private final String[] examples;
-
-  private final String defaultValue;
+public class PropertyDescriptionData extends AbstractDescriptionData {
 
+  private final String name;
   @JsonIgnore
   private final String source;
 
   public PropertyDescriptionData(String name, String description, String[] 
examples, String defaultValue, String source) {
+    super(description, defaultValue, examples);
     this.name = name;
-    this.description = description;
-    this.examples = examples;
-    this.defaultValue = defaultValue;
     this.source = source;
   }
 
@@ -44,18 +36,6 @@ public String getName() {
     return name;
   }
 
-  public String getDescription() {
-    return description;
-  }
-
-  public String[] getExamples() {
-    return examples;
-  }
-
-  public String getDefaultValue() {
-    return defaultValue;
-  }
-
   public String getSource() {
     return source;
   }
diff --git 
a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/response/ShipperConfigDescriptionData.java
 
b/ambari-logsearch-docs/src/main/java/org/apache/ambari/logsearch/doc/ShipperConfigDescriptionData.java
similarity index 67%
rename from 
ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/response/ShipperConfigDescriptionData.java
rename to 
ambari-logsearch-docs/src/main/java/org/apache/ambari/logsearch/doc/ShipperConfigDescriptionData.java
index 91f7420db1..2afd3d1c66 100644
--- 
a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/response/ShipperConfigDescriptionData.java
+++ 
b/ambari-logsearch-docs/src/main/java/org/apache/ambari/logsearch/doc/ShipperConfigDescriptionData.java
@@ -16,37 +16,18 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.ambari.logsearch.model.response;
+package org.apache.ambari.logsearch.doc;
 
-public class ShipperConfigDescriptionData {
-  private final String path;
-
-  private final String description;
-
-  private final String[] examples;
+public class ShipperConfigDescriptionData extends AbstractDescriptionData {
 
-  private final String defaultValue;
+  private final String path;
 
   public ShipperConfigDescriptionData(String path, String description, 
String[] examples, String defaultValue) {
+    super(description, defaultValue, examples);
     this.path = path;
-    this.description = description;
-    this.examples = examples;
-    this.defaultValue = defaultValue;
   }
 
   public String getPath() {
     return path;
   }
-
-  public String getDescription() {
-    return description;
-  }
-
-  public String[] getExamples() {
-    return examples;
-  }
-
-  public String getDefaultValue() {
-    return defaultValue;
-  }
 }
diff --git 
a/ambari-logsearch-docs/src/main/java/org/apache/ambari/logsearch/doc/ShipperConfigDescriptionDataHolder.java
 
b/ambari-logsearch-docs/src/main/java/org/apache/ambari/logsearch/doc/ShipperConfigDescriptionDataHolder.java
new file mode 100644
index 0000000000..0a61e6ac07
--- /dev/null
+++ 
b/ambari-logsearch-docs/src/main/java/org/apache/ambari/logsearch/doc/ShipperConfigDescriptionDataHolder.java
@@ -0,0 +1,54 @@
+/*
+ * 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.doc;
+
+import java.util.List;
+
+public class ShipperConfigDescriptionDataHolder {
+  private final List<ShipperConfigDescriptionData> topLevelConfigSections;
+  private final List<ShipperConfigDescriptionData> inputConfigSections;
+  private final List<ShipperConfigDescriptionData> filterConfigSections;
+  private final List<ShipperConfigDescriptionData> postMapValuesConfigSections;
+
+  public ShipperConfigDescriptionDataHolder(List<ShipperConfigDescriptionData> 
topLevelConfigSections,
+                                            List<ShipperConfigDescriptionData> 
inputConfigSections,
+                                            List<ShipperConfigDescriptionData> 
filterConfigSections,
+                                            List<ShipperConfigDescriptionData> 
postMapValuesConfigSections) {
+    this.topLevelConfigSections = topLevelConfigSections;
+    this.inputConfigSections = inputConfigSections;
+    this.filterConfigSections = filterConfigSections;
+    this.postMapValuesConfigSections = postMapValuesConfigSections;
+  }
+
+  public List<ShipperConfigDescriptionData> getTopLevelConfigSections() {
+    return topLevelConfigSections;
+  }
+
+  public List<ShipperConfigDescriptionData> getInputConfigSections() {
+    return inputConfigSections;
+  }
+
+  public List<ShipperConfigDescriptionData> getFilterConfigSections() {
+    return filterConfigSections;
+  }
+
+  public List<ShipperConfigDescriptionData> getPostMapValuesConfigSections() {
+    return postMapValuesConfigSections;
+  }
+}
diff --git a/ambari-logsearch-docs/src/main/resources/log4j2.xml 
b/ambari-logsearch-docs/src/main/resources/log4j2.xml
new file mode 100644
index 0000000000..a8694ceac5
--- /dev/null
+++ b/ambari-logsearch-docs/src/main/resources/log4j2.xml
@@ -0,0 +1,23 @@
+<?xml version="1.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.
+-->
+<Configuration>
+  <Loggers>
+    <Root level="fatal">
+    </Root>
+  </Loggers>
+</Configuration>
\ No newline at end of file
diff --git 
a/ambari-logsearch-docs/src/main/resources/templates/logfeeder_properties.md.ftl
 
b/ambari-logsearch-docs/src/main/resources/templates/logfeeder_properties.md.ftl
new file mode 100644
index 0000000000..653f6048d9
--- /dev/null
+++ 
b/ambari-logsearch-docs/src/main/resources/templates/logfeeder_properties.md.ftl
@@ -0,0 +1,25 @@
+<!---
+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.
+-->
+## Log Feeder Configurations
+
+| `Name` | `Description` | `Default` | `Examples` |
+|---|---|---|---|
+<#if logfeederProperties??>
+    <#list logfeederProperties as logfeederProperty>
+|`${logfeederProperty.name}`|${logfeederProperty.description}|${logfeederProperty.defaultValue}|${logfeederProperty.examples}|
+    </#list>
+</#if>
\ No newline at end of file
diff --git 
a/ambari-logsearch-docs/src/main/resources/templates/logsearch_properties.md.ftl
 
b/ambari-logsearch-docs/src/main/resources/templates/logsearch_properties.md.ftl
new file mode 100644
index 0000000000..8089fe9d05
--- /dev/null
+++ 
b/ambari-logsearch-docs/src/main/resources/templates/logsearch_properties.md.ftl
@@ -0,0 +1,25 @@
+<!---
+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.
+-->
+## Log Search Configurations
+
+| `Name` | `Description` | `Default` | `Examples` |
+|---|---|---|---|
+<#if logsearchProperties??>
+    <#list logsearchProperties as logsearchProperty>
+|`${logsearchProperty.name}`|${logsearchProperty.description}|${logsearchProperty.defaultValue}|${logsearchProperty.examples}|
+    </#list>
+</#if>
\ No newline at end of file
diff --git 
a/ambari-logsearch-docs/src/main/resources/templates/shipper_configurations.md.ftl
 
b/ambari-logsearch-docs/src/main/resources/templates/shipper_configurations.md.ftl
new file mode 100644
index 0000000000..85a7f34abe
--- /dev/null
+++ 
b/ambari-logsearch-docs/src/main/resources/templates/shipper_configurations.md.ftl
@@ -0,0 +1,65 @@
+<!---
+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.
+-->
+
+## Log Feeder Shipper Descriptor
+
+### Top Level Descriptor Sections
+
+| `Path` | `Description` | `Default` | `Examples` |
+|---|---|---|---|
+<#if shipperConfigs.topLevelSections??>
+    <#list shipperConfigs.topLevelSections as section>
+|`${section.path}`|${section.description}|${section.defaultValue}|${section.examples}|
+    </#list>
+</#if>
+|`/output`|A list of output descriptors|`{}`||
+
+### Input Descriptor Sections
+
+| `Path` | `Description` | `Default` | `Examples` |
+|---|---|---|---|
+<#if shipperConfigs.inputConfigSections??>
+    <#list shipperConfigs.inputConfigSections as section>
+|`${section.path}`|${section.description}|${section.defaultValue}|${section.examples}|
+    </#list>
+</#if>
+
+### Filter Descriptor Sections
+
+| `Path` | `Description` | `Default` | `Examples` |
+|---|---|---|---|
+<#if shipperConfigs.filterConfigSections??>
+    <#list shipperConfigs.filterConfigSections as section>
+|`${section.path}`|${section.description}|${section.defaultValue}|${section.examples}|
+    </#list>
+</#if>
+
+### Mapper Descriptor Sections
+
+| `Path` | `Description` | `Default` | `Examples` |
+|---|---|---|---|
+<#if shipperConfigs.postMapValuesConfigSections??>
+    <#list shipperConfigs.postMapValuesConfigSections as section>
+|`${section.path}`|${section.description}|${section.defaultValue}|${section.examples}|
+    </#list>
+</#if>
+
+### Output Descriptor Sections
+
+| `Path` | `Description` | `Default` | `Examples` |
+|---|---|---|---|
+|`/output/[]/is_enabled`|A flag to show if the output should be 
used.|true|<ul><li>`true`</li><li>`false`</li></ul>|
\ No newline at end of file
diff --git 
a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/conf/LogFeederProps.java
 
b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/conf/LogFeederProps.java
index 3be62aee2b..3c6c42fb8e 100644
--- 
a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/conf/LogFeederProps.java
+++ 
b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/conf/LogFeederProps.java
@@ -91,7 +91,7 @@
     description = "Use implicit routing for Solr Collections.",
     examples = {"true"},
     defaultValue = "false",
-    sources = {LogFeederConstants.SOLR_IMPLICIT_ROUTING_PROPERTY}
+    sources = {LogFeederConstants.LOGFEEDER_PROPERTIES_FILE}
   )
   @Value("${"+ LogFeederConstants.SOLR_IMPLICIT_ROUTING_PROPERTY + ":false}")
   private boolean solrImplicitRouting;
@@ -245,7 +245,7 @@
     description = "Option to support sending logs to cloud storage. You can 
choose between supporting only cloud storage, non-cloud storage or both",
     examples = {"default", "cloud", "hybrid"},
     defaultValue = "default",
-    sources = {LogFeederConstants.CLOUD_STORAGE_MODE}
+    sources = {LogFeederConstants.LOGFEEDER_PROPERTIES_FILE}
   )
   @Value("${" + LogFeederConstants.CLOUD_STORAGE_MODE + ":default}")
   public LogFeederMode cloudStorageMode;
@@ -255,7 +255,7 @@
     description = "Type of storage that is the destination for cloud output 
logs.",
     examples = {"hdfs", "s3", "gcs", "adls", "wasb", "none"},
     defaultValue = "none",
-    sources = {LogFeederConstants.CLOUD_STORAGE_DESTINATION}
+    sources = {LogFeederConstants.LOGFEEDER_PROPERTIES_FILE}
   )
   @Value("${" + LogFeederConstants.CLOUD_STORAGE_DESTINATION + ":none}")
   private CloudStorageDestination cloudStorageDestination;
diff --git 
a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/conf/output/S3OutputConfig.java
 
b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/conf/output/S3OutputConfig.java
index 465c2bd2fc..3b689cac61 100644
--- 
a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/conf/output/S3OutputConfig.java
+++ 
b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/conf/output/S3OutputConfig.java
@@ -146,8 +146,7 @@
 
   @LogSearchPropertyDescription(
     name = LogFeederConstants.S3_MULTIOBJECT_DELETE_ENABLE,
-    description = "When enabled, multiple single-object delete requests are 
replaced by\n" +
-      "    a single 'delete multiple objects'-request, reducing the number of 
requests.",
+    description = "When enabled, multiple single-object delete requests are 
replaced by a single 'delete multiple objects'-request, reducing the number of 
requests.",
     defaultValue = "true",
     examples = {"false"},
     sources = {LogFeederConstants.LOGFEEDER_PROPERTIES_FILE}
diff --git 
a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/common/PropertyDescriptionStorage.java
 
b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/common/PropertyDescriptionStorage.java
deleted file mode 100644
index bb40a914fe..0000000000
--- 
a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/common/PropertyDescriptionStorage.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.ambari.logsearch.common;
-
-import org.apache.ambari.logsearch.config.api.LogSearchPropertyDescription;
-import org.apache.ambari.logsearch.model.response.PropertyDescriptionData;
-import org.reflections.Reflections;
-import org.reflections.scanners.FieldAnnotationsScanner;
-import org.reflections.scanners.MethodAnnotationsScanner;
-import org.springframework.beans.factory.annotation.Value;
-
-import javax.annotation.PostConstruct;
-import javax.inject.Named;
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.stream.Collectors;
-
-import static 
org.apache.ambari.logsearch.common.LogSearchConstants.LOGSEARCH_PROPERTIES_FILE;
-
-@Named
-public class PropertyDescriptionStorage {
-
-  private final Map<String, List<PropertyDescriptionData>> 
propertyDescriptions = new ConcurrentHashMap<>();
-
-  
@Value("#{'${logsearch.doc.scan.prop.packages:org.apache.ambari.logsearch,org.apache.ambari.logfeeder}'.split(',')}")
-  @LogSearchPropertyDescription(
-    name = "logsearch.doc.scan.prop.packages",
-    description = "Comma separated list of packages for scanning 
@LogSearchPropertyDescription annotations.",
-    examples = {"org.apache.ambari.logsearch.mypackage"},
-    defaultValue = "org.apache.ambari.logsearch,org.apache.ambari.logfeeder",
-    sources = {LOGSEARCH_PROPERTIES_FILE}
-  )
-  private List<String> packagesToScan;
-
-  @PostConstruct
-  public void postConstruct() {
-    Thread loadPropertyDescriptionsThread = new 
Thread("load_property_descriptions") {
-      @Override
-      public void run() {
-        fillPropertyDescriptions();
-      }
-    };
-    loadPropertyDescriptionsThread.setDaemon(true);
-    loadPropertyDescriptionsThread.start();
-  }
-
-  public Map<String, List<PropertyDescriptionData>> getPropertyDescriptions() {
-    return propertyDescriptions;
-  }
-
-  private void fillPropertyDescriptions() {
-    List<PropertyDescriptionData> propertyDescriptionsList = 
getPropertyDescriptions(packagesToScan);
-    Map<String, List<PropertyDescriptionData>> mapToAdd = 
propertyDescriptionsList.stream()
-      .sorted((o1, o2) -> o1.getName().compareTo(o2.getName()))
-      .collect(Collectors.groupingBy(PropertyDescriptionData::getSource));
-    propertyDescriptions.putAll(mapToAdd);
-  }
-
-  private List<PropertyDescriptionData> getPropertyDescriptions(List<String> 
packagesToScan) {
-    List<PropertyDescriptionData> result = new ArrayList<>();
-    for (String packageToScan : packagesToScan) {
-      Reflections reflections = new Reflections(packageToScan, new 
FieldAnnotationsScanner(), new MethodAnnotationsScanner());
-      Set<Field> fields = 
reflections.getFieldsAnnotatedWith(LogSearchPropertyDescription.class);
-      for (Field field : fields) {
-        LogSearchPropertyDescription propDescription = 
field.getAnnotation(LogSearchPropertyDescription.class);
-        for (String source : propDescription.sources()) {
-          result.add(new PropertyDescriptionData(propDescription.name(), 
propDescription.description(), propDescription.examples(), 
propDescription.defaultValue(), source));
-        }
-      }
-      Set<Method> methods = 
reflections.getMethodsAnnotatedWith(LogSearchPropertyDescription.class);
-      for (Method method : methods) {
-        LogSearchPropertyDescription propDescription = 
method.getAnnotation(LogSearchPropertyDescription.class);
-        for (String source : propDescription.sources()) {
-          result.add(new PropertyDescriptionData(propDescription.name(), 
propDescription.description(), propDescription.examples(), 
propDescription.defaultValue(), source));
-        }
-      }
-    }
-    return result;
-  }
-}
diff --git 
a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/common/ShipperConfigDescriptionStorage.java
 
b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/common/ShipperConfigDescriptionStorage.java
deleted file mode 100644
index accf11a0ff..0000000000
--- 
a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/common/ShipperConfigDescriptionStorage.java
+++ /dev/null
@@ -1,67 +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.common;
-
-import org.apache.ambari.logsearch.config.api.ShipperConfigElementDescription;
-import org.apache.ambari.logsearch.model.response.ShipperConfigDescriptionData;
-import org.reflections.Reflections;
-import org.reflections.scanners.FieldAnnotationsScanner;
-
-import javax.annotation.PostConstruct;
-import javax.inject.Named;
-import java.lang.reflect.Field;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Set;
-
-@Named
-public class ShipperConfigDescriptionStorage {
-
-  private static final String SHIPPER_CONFIG_PACKAGE = 
"org.apache.ambari.logsearch.config.json.model.inputconfig.impl";
-  
-  private final List<ShipperConfigDescriptionData> shipperConfigDescription = 
new ArrayList<>();
-
-  @PostConstruct
-  public void postConstruct() {
-    Thread loadShipperConfigDescriptionThread = new 
Thread("load_shipper_config_description") {
-      @Override
-      public void run() {
-        fillShipperConfigDescriptions();
-      }
-    };
-    loadShipperConfigDescriptionThread.setDaemon(true);
-    loadShipperConfigDescriptionThread.start();
-  }
-
-  public List<ShipperConfigDescriptionData> getShipperConfigDescription() {
-    return shipperConfigDescription;
-  }
-
-  private void fillShipperConfigDescriptions() {
-    Reflections reflections = new Reflections(SHIPPER_CONFIG_PACKAGE, new 
FieldAnnotationsScanner());
-    Set<Field> fields = 
reflections.getFieldsAnnotatedWith(ShipperConfigElementDescription.class);
-    for (Field field : fields) {
-      ShipperConfigElementDescription description = 
field.getAnnotation(ShipperConfigElementDescription.class);
-      shipperConfigDescription.add(new 
ShipperConfigDescriptionData(description.path(), description.description(),
-          description.examples(), description.defaultValue()));
-    }
-    
-    shipperConfigDescription.sort((o1, o2) -> 
o1.getPath().compareTo(o2.getPath()));
-  }
-}
diff --git 
a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/doc/DocConstants.java
 
b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/doc/DocConstants.java
index 8301bb0a97..49f58584a0 100644
--- 
a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/doc/DocConstants.java
+++ 
b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/doc/DocConstants.java
@@ -108,9 +108,6 @@
     public static final String GET_FEATURES_LIST = "Get features list.";
     public static final String GET_APP_DETAILS_OD = "Get application details.";
     public static final String GET_AUTH_DETAILS_OD = "Get authentication 
details.";
-    public static final String GET_ALL_PROPERTIES_INFO_OD = "List all 
available properties for Log Search and Log Feeder";
-    public static final String GET_LOGSEARCH_PROPERTIES_INFO_OD = "List all 
available properties for Log Search property file (e.g: 
logsearch.properties/logfeeder.properties)";
-    public static final String GET_ALL_SHIPPER_CONFIG_INFO_OD = "List all 
available shipper configuration element";
   }
 
   public class MetadataDescriptions {
diff --git 
a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/manager/InfoManager.java
 
b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/manager/InfoManager.java
index 687bf0b577..12ca598dc7 100644
--- 
a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/manager/InfoManager.java
+++ 
b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/manager/InfoManager.java
@@ -20,16 +20,11 @@
 package org.apache.ambari.logsearch.manager;
 
 import java.util.HashMap;
-import java.util.List;
 import java.util.Map;
 
 import org.apache.ambari.logsearch.common.LogSearchConstants;
 import org.apache.ambari.logsearch.conf.AuthPropsConfig;
-import org.apache.ambari.logsearch.common.PropertyDescriptionStorage;
-import org.apache.ambari.logsearch.common.ShipperConfigDescriptionStorage;
 import org.apache.ambari.logsearch.conf.LogSearchConfigApiConfig;
-import org.apache.ambari.logsearch.model.response.PropertyDescriptionData;
-import org.apache.ambari.logsearch.model.response.ShipperConfigDescriptionData;
 import org.springframework.beans.factory.annotation.Value;
 
 import javax.inject.Inject;
@@ -53,12 +48,6 @@
   @Inject
   private LogSearchConfigApiConfig logSearchConfigApiConfig;
 
-  @Inject
-  private PropertyDescriptionStorage propertyDescriptionStore;
-
-  @Inject
-  private ShipperConfigDescriptionStorage shipperConfigDescriptionStore;
-
   public Map<String, String> getApplicationInfo() {
     Map<String, String> appMap = new HashMap<>();
     appMap.put("application.version", logsearchAppVersion);
@@ -85,16 +74,4 @@
     featuresMap.put(LogSearchConstants.LOG_LEVEL_FILTERS_KEY, 
logLevelFiltersEnabled);
     return featuresMap;
   }
-
-  public Map<String, List<PropertyDescriptionData>> getPropertyDescriptions() {
-    return propertyDescriptionStore.getPropertyDescriptions();
-  }
-
-  public List<PropertyDescriptionData> getLogSearchPropertyDescriptions(String 
propertiesFile) {
-    return getPropertyDescriptions().get(propertiesFile);
-  }
-  
-  public List<ShipperConfigDescriptionData> 
getLogSearchShipperConfigDescription() {
-    return shipperConfigDescriptionStore.getShipperConfigDescription();
-  }
 }
diff --git 
a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/rest/InfoResource.java
 
b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/rest/InfoResource.java
index 52ecdca79f..6fdb5eb38d 100644
--- 
a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/rest/InfoResource.java
+++ 
b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/rest/InfoResource.java
@@ -22,24 +22,17 @@
 import javax.inject.Named;
 import javax.ws.rs.GET;
 import javax.ws.rs.Path;
-import javax.ws.rs.PathParam;
 import javax.ws.rs.Produces;
 
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.apache.ambari.logsearch.manager.InfoManager;
-import org.apache.ambari.logsearch.model.response.PropertyDescriptionData;
-import org.apache.ambari.logsearch.model.response.ShipperConfigDescriptionData;
 import org.springframework.context.annotation.Scope;
 
-import java.util.List;
 import java.util.Map;
 
-import static 
org.apache.ambari.logsearch.doc.DocConstants.PublicOperationDescriptions.GET_ALL_PROPERTIES_INFO_OD;
-import static 
org.apache.ambari.logsearch.doc.DocConstants.PublicOperationDescriptions.GET_ALL_SHIPPER_CONFIG_INFO_OD;
 import static 
org.apache.ambari.logsearch.doc.DocConstants.PublicOperationDescriptions.GET_APP_DETAILS_OD;
 import static 
org.apache.ambari.logsearch.doc.DocConstants.PublicOperationDescriptions.GET_FEATURES_LIST;
-import static 
org.apache.ambari.logsearch.doc.DocConstants.PublicOperationDescriptions.GET_LOGSEARCH_PROPERTIES_INFO_OD;
 import static 
org.apache.ambari.logsearch.doc.DocConstants.PublicOperationDescriptions.GET_AUTH_DETAILS_OD;
 
 @Api(value = "info", description = "General configuration information")
@@ -58,22 +51,6 @@
     return infoManager.getApplicationInfo();
   }
 
-  @GET
-  @Path("/properties")
-  @Produces({"application/json"})
-  @ApiOperation(GET_ALL_PROPERTIES_INFO_OD)
-  public Map<String, List<PropertyDescriptionData>> getPropertyDescriptions() {
-    return infoManager.getPropertyDescriptions();
-  }
-
-  @GET
-  @Path("/properties/{propertyFile}")
-  @Produces({"application/json"})
-  @ApiOperation(GET_LOGSEARCH_PROPERTIES_INFO_OD)
-  public List<PropertyDescriptionData> 
getPropertyFileDescription(@PathParam("propertyFile") String propertyFile) {
-    return infoManager.getLogSearchPropertyDescriptions(propertyFile);
-  }
-
   @GET
   @Path("/features")
   @Produces({"application/json"})
@@ -89,12 +66,4 @@
   public Map<String, Boolean> getAuthInfo() {
     return infoManager.getAuthMap();
   }
-
-  @GET
-  @Path("/shipperconfig")
-  @Produces({"application/json"})
-  @ApiOperation(GET_ALL_SHIPPER_CONFIG_INFO_OD)
-  public List<ShipperConfigDescriptionData> getShipperConfigDescription() {
-    return infoManager.getLogSearchShipperConfigDescription();
-  }
 }
diff --git a/docs/.keep b/docs/.keep
new file mode 100644
index 0000000000..192445554a
--- /dev/null
+++ b/docs/.keep
@@ -0,0 +1,14 @@
+# 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
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 53d99b5ceb..23a5d8e614 100644
--- a/pom.xml
+++ b/pom.xml
@@ -44,6 +44,7 @@
         <module>ambari-logsearch-logfeeder-container-registry</module>
         <module>ambari-logsearch-config-local</module>
         <module>ambari-logsearch-config-solr</module>
+        <module>ambari-logsearch-docs</module>
       </modules>
     </profile>
     <profile>
@@ -63,6 +64,7 @@
         <module>ambari-logsearch-logfeeder-container-registry</module>
         <module>ambari-logsearch-config-local</module>
         <module>ambari-logsearch-config-solr</module>
+        <module>ambari-logsearch-docs</module>
       </modules>
     </profile>
     <profile>


 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


> Log Search: generate mardown docs for properties and logfeeder configs based 
> on annotations
> -------------------------------------------------------------------------------------------
>
>                 Key: AMBARI-23456
>                 URL: https://issues.apache.org/jira/browse/AMBARI-23456
>             Project: Ambari
>          Issue Type: Bug
>          Components: ambari-logsearch
>    Affects Versions: 3.0.0
>            Reporter: Olivér Szabó
>            Assignee: Olivér Szabó
>            Priority: Major
>              Labels: pull-request-available
>             Fix For: 3.0.0
>
>




--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to