You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by mg...@apache.org on 2017/05/29 10:07:10 UTC
ambari git commit: AMBARI-21119 Log Search REST API validate input
configurations and log level filters (mgergely)
Repository: ambari
Updated Branches:
refs/heads/trunk 9f5f7656c -> 93130e6bf
AMBARI-21119 Log Search REST API validate input configurations and log level filters (mgergely)
Change-Id: I9e09a73c60ad76fd51218742d1ebf18f42afbc62
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/93130e6b
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/93130e6b
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/93130e6b
Branch: refs/heads/trunk
Commit: 93130e6bf83dc656ecb486a8f5fbabcb97a694f1
Parents: 9f5f765
Author: Miklos Gergely <mg...@hortonworks.com>
Authored: Mon May 29 12:06:25 2017 +0200
Committer: Miklos Gergely <mg...@hortonworks.com>
Committed: Mon May 29 12:07:01 2017 +0200
----------------------------------------------------------------------
.../impl/MapFieldNameDescriptorImpl.java | 4 +-
.../logsearch/manager/ShipperConfigManager.java | 10 +--
.../model/common/LSServerConditions.java | 7 ++
.../logsearch/model/common/LSServerFields.java | 6 ++
.../logsearch/model/common/LSServerFilter.java | 26 ++++---
.../common/LSServerFilterDeserializer.java | 60 +++++++++++++++
.../model/common/LSServerFilterGrok.java | 6 ++
.../model/common/LSServerFilterJson.java | 2 +
.../model/common/LSServerFilterKeyValue.java | 2 +
.../logsearch/model/common/LSServerInput.java | 37 +++++----
.../model/common/LSServerInputConfig.java | 13 ++++
.../model/common/LSServerInputDeserializer.java | 62 +++++++++++++++
.../model/common/LSServerInputFile.java | 2 +
.../model/common/LSServerInputFileBase.java | 2 +
.../model/common/LSServerInputS3File.java | 6 ++
.../model/common/LSServerLogLevelFilter.java | 24 ++++--
.../model/common/LSServerLogLevelFilterMap.java | 5 ++
.../logsearch/model/common/LSServerMapDate.java | 5 ++
.../model/common/LSServerMapFieldCopy.java | 5 ++
.../model/common/LSServerMapFieldName.java | 5 ++
.../model/common/LSServerMapFieldValue.java | 6 ++
.../model/common/LSServerPostMapValues.java | 34 ++++++---
.../model/common/LSServerPostMapValuesList.java | 59 +++++++++++++++
.../LSServerPostMapValuesListDeserializer.java | 79 ++++++++++++++++++++
.../LSServerPostMapValuesListSerializer.java | 44 +++++++++++
.../common/LSServerPostMapValuesSerializer.java | 39 ----------
.../logsearch/rest/ShipperConfigResource.java | 19 +++--
27 files changed, 474 insertions(+), 95 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/93130e6b/ambari-logsearch/ambari-logsearch-config-zookeeper/src/main/java/org/apache/ambari/logsearch/config/zookeeper/model/inputconfig/impl/MapFieldNameDescriptorImpl.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-config-zookeeper/src/main/java/org/apache/ambari/logsearch/config/zookeeper/model/inputconfig/impl/MapFieldNameDescriptorImpl.java b/ambari-logsearch/ambari-logsearch-config-zookeeper/src/main/java/org/apache/ambari/logsearch/config/zookeeper/model/inputconfig/impl/MapFieldNameDescriptorImpl.java
index 333cb67..e5676b0 100644
--- a/ambari-logsearch/ambari-logsearch-config-zookeeper/src/main/java/org/apache/ambari/logsearch/config/zookeeper/model/inputconfig/impl/MapFieldNameDescriptorImpl.java
+++ b/ambari-logsearch/ambari-logsearch-config-zookeeper/src/main/java/org/apache/ambari/logsearch/config/zookeeper/model/inputconfig/impl/MapFieldNameDescriptorImpl.java
@@ -27,11 +27,11 @@ import com.google.gson.annotations.SerializedName;
public class MapFieldNameDescriptorImpl implements MapFieldNameDescriptor {
@Override
public String getJsonName() {
- return "map_fieldname";
+ return "map_field_name";
}
@Expose
- @SerializedName("new_fieldname")
+ @SerializedName("new_field_name")
private String newFieldName;
@Override
http://git-wip-us.apache.org/repos/asf/ambari/blob/93130e6b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/manager/ShipperConfigManager.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/manager/ShipperConfigManager.java b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/manager/ShipperConfigManager.java
index 44d91a9..a0db92f 100644
--- a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/manager/ShipperConfigManager.java
+++ b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/manager/ShipperConfigManager.java
@@ -27,6 +27,7 @@ import org.apache.ambari.logsearch.model.common.LSServerInputConfig;
import org.apache.ambari.logsearch.model.common.LSServerLogLevelFilterMap;
import org.apache.log4j.Logger;
+import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.common.collect.ImmutableMap;
import javax.annotation.PostConstruct;
@@ -57,8 +58,7 @@ public class ShipperConfigManager extends JsonManagerBase {
return new LSServerInputConfig(inputConfig);
}
- public Response createInputConfig(String clusterName, String serviceName, String inputConfig) {
-
+ public Response createInputConfig(String clusterName, String serviceName, LSServerInputConfig inputConfig) {
try {
if (LogSearchConfigConfigurer.getConfig().inputConfigExists(clusterName, serviceName)) {
return Response.serverError()
@@ -67,7 +67,7 @@ public class ShipperConfigManager extends JsonManagerBase {
.build();
}
- LogSearchConfigConfigurer.getConfig().createInputConfig(clusterName, serviceName, inputConfig);
+ LogSearchConfigConfigurer.getConfig().createInputConfig(clusterName, serviceName, new ObjectMapper().writeValueAsString(inputConfig));
return Response.ok().build();
} catch (Exception e) {
logger.warn("Could not create input config", e);
@@ -75,7 +75,7 @@ public class ShipperConfigManager extends JsonManagerBase {
}
}
- public Response setInputConfig(String clusterName, String serviceName, String inputConfig) {
+ public Response setInputConfig(String clusterName, String serviceName, LSServerInputConfig inputConfig) {
try {
if (!LogSearchConfigConfigurer.getConfig().inputConfigExists(clusterName, serviceName)) {
return Response.serverError()
@@ -84,7 +84,7 @@ public class ShipperConfigManager extends JsonManagerBase {
.build();
}
- LogSearchConfigConfigurer.getConfig().setInputConfig(clusterName, serviceName, inputConfig);
+ LogSearchConfigConfigurer.getConfig().setInputConfig(clusterName, serviceName, new ObjectMapper().writeValueAsString(inputConfig));
return Response.ok().build();
} catch (Exception e) {
logger.warn("Could not update input config", e);
http://git-wip-us.apache.org/repos/asf/ambari/blob/93130e6b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerConditions.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerConditions.java b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerConditions.java
index 9cd9710..11c4f70 100644
--- a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerConditions.java
+++ b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerConditions.java
@@ -19,14 +19,21 @@
package org.apache.ambari.logsearch.model.common;
+import javax.validation.Valid;
+import javax.validation.constraints.NotNull;
+
import org.apache.ambari.logsearch.config.api.model.inputconfig.Conditions;
import io.swagger.annotations.ApiModel;
@ApiModel
public class LSServerConditions {
+ @Valid
+ @NotNull
private LSServerFields fields;
+ public LSServerConditions() {}
+
public LSServerConditions(Conditions conditions) {
this.fields = new LSServerFields(conditions.getFields());
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/93130e6b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerFields.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerFields.java b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerFields.java
index 5f570da..dcaadb6 100644
--- a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerFields.java
+++ b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerFields.java
@@ -21,14 +21,20 @@ package org.apache.ambari.logsearch.model.common;
import java.util.Set;
+import javax.validation.constraints.NotNull;
+
import org.apache.ambari.logsearch.config.api.model.inputconfig.Fields;
import io.swagger.annotations.ApiModel;
@ApiModel
public class LSServerFields {
+ @NotNull
private Set<String> type;
+ public LSServerFields() {
+ }
+
public LSServerFields(Fields fields) {
this.type = fields.getType();
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/93130e6b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerFilter.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerFilter.java b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerFilter.java
index 0190c01..d99a77d 100644
--- a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerFilter.java
+++ b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerFilter.java
@@ -19,11 +19,13 @@
package org.apache.ambari.logsearch.model.common;
-import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import javax.validation.Valid;
+import javax.validation.constraints.NotNull;
+
import org.apache.ambari.logsearch.config.api.model.inputconfig.FilterDescriptor;
import org.apache.ambari.logsearch.config.api.model.inputconfig.PostMapValues;
@@ -36,8 +38,11 @@ import io.swagger.annotations.ApiModel;
@ApiModel
@JsonInclude(Include.NON_NULL)
public abstract class LSServerFilter {
+ @NotNull
private String filter;
+ @Valid
+ @NotNull
private LSServerConditions conditions;
@JsonProperty("sort_order")
@@ -48,10 +53,14 @@ public abstract class LSServerFilter {
@JsonProperty("remove_source_field")
private Boolean removeSourceField;
- private Map<String, List<LSServerPostMapValues>> postMapValues;
+ @Valid
+ @JsonProperty("post_map_values")
+ private Map<String, LSServerPostMapValuesList> postMapValues;
@JsonProperty("is_enabled")
private Boolean isEnabled;
+
+ public LSServerFilter() {}
public LSServerFilter(FilterDescriptor filterDescriptor) {
this.filter = filterDescriptor.getFilter();
@@ -60,13 +69,10 @@ public abstract class LSServerFilter {
this.sourceField = filterDescriptor.getSourceField();
this.removeSourceField = filterDescriptor.isRemoveSourceField();
- postMapValues = new HashMap<String, List<LSServerPostMapValues>>();
+ this.postMapValues = new HashMap<String, LSServerPostMapValuesList>();
for (Map.Entry<String, ? extends List<? extends PostMapValues>> e : filterDescriptor.getPostMapValues().entrySet()) {
- List<LSServerPostMapValues> lsServerPostMapValues = new ArrayList<>();
- for (PostMapValues pmv : e.getValue()) {
- lsServerPostMapValues.add(new LSServerPostMapValues(pmv));
- }
- postMapValues.put(e.getKey(), lsServerPostMapValues);
+ LSServerPostMapValuesList lsServerPostMapValuesList = new LSServerPostMapValuesList(e.getValue());
+ postMapValues.put(e.getKey(), lsServerPostMapValuesList);
}
this.isEnabled = filterDescriptor.isEnabled();
@@ -112,11 +118,11 @@ public abstract class LSServerFilter {
this.removeSourceField = removeSourceField;
}
- public Map<String, List<LSServerPostMapValues>> getPostMapValues() {
+ public Map<String, LSServerPostMapValuesList> getPostMapValues() {
return postMapValues;
}
- public void setPostMapValues(Map<String, List<LSServerPostMapValues>> postMapValues) {
+ public void setPostMapValues(Map<String, LSServerPostMapValuesList> postMapValues) {
this.postMapValues = postMapValues;
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/93130e6b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerFilterDeserializer.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerFilterDeserializer.java b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerFilterDeserializer.java
new file mode 100644
index 0000000..df3998f
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerFilterDeserializer.java
@@ -0,0 +1,60 @@
+/*
+ * 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.model.common;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+import com.fasterxml.jackson.core.JsonParser;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.core.ObjectCodec;
+import com.fasterxml.jackson.core.TreeNode;
+import com.fasterxml.jackson.databind.DeserializationContext;
+import com.fasterxml.jackson.databind.JsonDeserializer;
+import com.fasterxml.jackson.databind.JsonNode;
+
+public class LSServerFilterDeserializer extends JsonDeserializer<List<LSServerFilter>> {
+ @Override
+ public List<LSServerFilter> deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException {
+ ObjectCodec oc = jp.getCodec();
+ JsonNode node = oc.readTree(jp);
+
+ List<LSServerFilter> filters = new ArrayList<>();
+ for (JsonNode filterNode : node) {
+ if (filterNode.get("filter") == null) {
+ throw new IllegalArgumentException("Each filter element must have a field called 'filter' declaring it's type");
+ }
+ switch (filterNode.get("filter").asText()) {
+ case "grok" :
+ filters.add(oc.treeToValue((TreeNode)filterNode, LSServerFilterGrok.class));
+ break;
+ case "keyvalue" :
+ filters.add(oc.treeToValue((TreeNode)filterNode, LSServerFilterKeyValue.class));
+ break;
+ case "json" :
+ filters.add(oc.treeToValue((TreeNode)filterNode, LSServerFilterJson.class));
+ break;
+ }
+ }
+
+ return filters;
+ }
+}
http://git-wip-us.apache.org/repos/asf/ambari/blob/93130e6b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerFilterGrok.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerFilterGrok.java b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerFilterGrok.java
index a8c4a7a..6de9f4c 100644
--- a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerFilterGrok.java
+++ b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerFilterGrok.java
@@ -19,6 +19,8 @@
package org.apache.ambari.logsearch.model.common;
+import javax.validation.constraints.NotNull;
+
import org.apache.ambari.logsearch.config.api.model.inputconfig.FilterDescriptor;
import org.apache.ambari.logsearch.config.api.model.inputconfig.FilterGrokDescriptor;
@@ -31,12 +33,16 @@ public class LSServerFilterGrok extends LSServerFilter {
@JsonProperty("log4j_format")
private String log4jFormat;
+ @NotNull
@JsonProperty("multiline_pattern")
private String multilinePattern;
+ @NotNull
@JsonProperty("message_pattern")
private String messagePattern;
+ public LSServerFilterGrok() {}
+
public LSServerFilterGrok(FilterDescriptor filterDescriptor) {
super(filterDescriptor);
if (filterDescriptor instanceof FilterGrokDescriptor) {
http://git-wip-us.apache.org/repos/asf/ambari/blob/93130e6b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerFilterJson.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerFilterJson.java b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerFilterJson.java
index 3c0ed17..d20f842 100644
--- a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerFilterJson.java
+++ b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerFilterJson.java
@@ -25,6 +25,8 @@ import io.swagger.annotations.ApiModel;
@ApiModel
public class LSServerFilterJson extends LSServerFilter {
+ public LSServerFilterJson() {}
+
public LSServerFilterJson(FilterDescriptor filterDescriptor) {
super(filterDescriptor);
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/93130e6b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerFilterKeyValue.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerFilterKeyValue.java b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerFilterKeyValue.java
index dcee25d..a879bb8 100644
--- a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerFilterKeyValue.java
+++ b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerFilterKeyValue.java
@@ -37,6 +37,8 @@ public class LSServerFilterKeyValue extends LSServerFilter {
@JsonProperty("value_borders")
private String valueBorders;
+ public LSServerFilterKeyValue() {}
+
public LSServerFilterKeyValue(FilterDescriptor filterDescriptor) {
super(filterDescriptor);
FilterKeyValueDescriptor filterKeyValueDescriptor = (FilterKeyValueDescriptor)filterDescriptor;
http://git-wip-us.apache.org/repos/asf/ambari/blob/93130e6b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerInput.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerInput.java b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerInput.java
index fe83fe4..e0f7564 100644
--- a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerInput.java
+++ b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerInput.java
@@ -21,6 +21,8 @@ package org.apache.ambari.logsearch.model.common;
import java.util.Map;
+import javax.validation.constraints.NotNull;
+
import org.apache.ambari.logsearch.config.api.model.inputconfig.InputDescriptor;
import com.fasterxml.jackson.annotation.JsonInclude;
@@ -32,42 +34,47 @@ import io.swagger.annotations.ApiModel;
@ApiModel
@JsonInclude(Include.NON_NULL)
public abstract class LSServerInput {
- private final String type;
- private final String rowtype;
- private final String path;
+ @NotNull
+ private String type;
+ private String rowtype;
+
+ @NotNull
+ private String path;
@JsonProperty("add_fields")
- private final Map<String, String> addFields;
+ private Map<String, String> addFields;
- private final String source;
- private final Boolean tail;
+ private String source;
+ private Boolean tail;
@JsonProperty("gen_event_md5")
- private final Boolean genEventMd5;
+ private Boolean genEventMd5;
@JsonProperty("use_event_md5_as_id")
- private final Boolean useEventMd5AsId;
+ private Boolean useEventMd5AsId;
@JsonProperty("start_position")
- private final String startPosition;
+ private String startPosition;
@JsonProperty("cache_enabled")
- private final Boolean cacheEnabled;
+ private Boolean cacheEnabled;
@JsonProperty("cache_key_field")
- private final String cacheKeyField;
+ private String cacheKeyField;
@JsonProperty("cache_last_dedup_enabled")
- private final Boolean cacheLastDedupEnabled;
+ private Boolean cacheLastDedupEnabled;
@JsonProperty("cache_size")
- private final Integer cacheSize;
+ private Integer cacheSize;
@JsonProperty("cache_dedup_interval")
- private final Long cacheDedupInterval;
+ private Long cacheDedupInterval;
@JsonProperty("is_enabled")
- private final Boolean isEnabled;
+ private Boolean isEnabled;
+
+ public LSServerInput() {}
public LSServerInput(InputDescriptor inputDescriptor) {
this.type = inputDescriptor.getType();
http://git-wip-us.apache.org/repos/asf/ambari/blob/93130e6b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerInputConfig.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerInputConfig.java b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerInputConfig.java
index e3dc0d1..81c4593 100644
--- a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerInputConfig.java
+++ b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerInputConfig.java
@@ -22,6 +22,9 @@ package org.apache.ambari.logsearch.model.common;
import java.util.ArrayList;
import java.util.List;
+import javax.validation.Valid;
+import javax.validation.constraints.NotNull;
+
import org.apache.ambari.logsearch.config.api.model.inputconfig.FilterDescriptor;
import org.apache.ambari.logsearch.config.api.model.inputconfig.FilterGrokDescriptor;
import org.apache.ambari.logsearch.config.api.model.inputconfig.FilterJsonDescriptor;
@@ -31,17 +34,27 @@ import org.apache.ambari.logsearch.config.api.model.inputconfig.InputDescriptor;
import org.apache.ambari.logsearch.config.api.model.inputconfig.InputFileBaseDescriptor;
import org.apache.ambari.logsearch.config.api.model.inputconfig.InputS3FileDescriptor;
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
@ApiModel
public class LSServerInputConfig {
+ @Valid
+ @NotNull
@ApiModelProperty
+ @JsonDeserialize(using = LSServerInputDeserializer.class)
private List<LSServerInput> input;
+ @Valid
+ @NotNull
@ApiModelProperty
+ @JsonDeserialize(using = LSServerFilterDeserializer.class)
private List<LSServerFilter> filter;
+ public LSServerInputConfig() {}
+
public LSServerInputConfig(InputConfig inputConfig) {
input = new ArrayList<>();
for (InputDescriptor inputDescriptor : inputConfig.getInput()) {
http://git-wip-us.apache.org/repos/asf/ambari/blob/93130e6b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerInputDeserializer.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerInputDeserializer.java b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerInputDeserializer.java
new file mode 100644
index 0000000..63a8627
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerInputDeserializer.java
@@ -0,0 +1,62 @@
+/*
+ * 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.model.common;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+import com.fasterxml.jackson.core.JsonParser;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.core.ObjectCodec;
+import com.fasterxml.jackson.core.TreeNode;
+import com.fasterxml.jackson.databind.DeserializationContext;
+import com.fasterxml.jackson.databind.JsonDeserializer;
+import com.fasterxml.jackson.databind.JsonNode;
+
+public class LSServerInputDeserializer extends JsonDeserializer<List<LSServerInput>> {
+ @Override
+ public List<LSServerInput> deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException {
+ ObjectCodec oc = jp.getCodec();
+ JsonNode node = oc.readTree(jp);
+
+ List<LSServerInput> inputs = new ArrayList<>();
+ for (JsonNode inputNode : node) {
+
+ String source = null;
+ if (inputNode.get("source") != null) {
+ source = inputNode.get("source").asText();
+ } else {
+ source = (inputNode.get("s3_access_key") != null || inputNode.get("s3_secret_key") != null) ? "s3_file" : "file";
+ }
+
+ switch (source) {
+ case "file" :
+ inputs.add(oc.treeToValue((TreeNode)inputNode, LSServerInputFile.class));
+ break;
+ case "s3_file" :
+ inputs.add(oc.treeToValue((TreeNode)inputNode, LSServerInputS3File.class));
+ break;
+ }
+ }
+
+ return inputs;
+ }
+}
http://git-wip-us.apache.org/repos/asf/ambari/blob/93130e6b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerInputFile.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerInputFile.java b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerInputFile.java
index 5c547ad..bb2a49c 100644
--- a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerInputFile.java
+++ b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerInputFile.java
@@ -25,6 +25,8 @@ import io.swagger.annotations.ApiModel;
@ApiModel
public class LSServerInputFile extends LSServerInputFileBase {
+ public LSServerInputFile() {}
+
public LSServerInputFile(InputDescriptor inputDescriptor) {
super(inputDescriptor);
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/93130e6b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerInputFileBase.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerInputFileBase.java b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerInputFileBase.java
index df21d0d..429d50a 100644
--- a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerInputFileBase.java
+++ b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerInputFileBase.java
@@ -37,6 +37,8 @@ public abstract class LSServerInputFileBase extends LSServerInput {
@JsonProperty("copy_file")
private Boolean copyFile;
+ public LSServerInputFileBase() {}
+
public LSServerInputFileBase(InputDescriptor inputDescriptor) {
super(inputDescriptor);
http://git-wip-us.apache.org/repos/asf/ambari/blob/93130e6b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerInputS3File.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerInputS3File.java b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerInputS3File.java
index 8e9acf0..24d25c4 100644
--- a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerInputS3File.java
+++ b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerInputS3File.java
@@ -19,6 +19,8 @@
package org.apache.ambari.logsearch.model.common;
+import javax.validation.constraints.NotNull;
+
import org.apache.ambari.logsearch.config.api.model.inputconfig.InputDescriptor;
import org.apache.ambari.logsearch.config.api.model.inputconfig.InputS3FileDescriptor;
@@ -28,12 +30,16 @@ import io.swagger.annotations.ApiModel;
@ApiModel
public class LSServerInputS3File extends LSServerInputFileBase {
+ @NotNull
@JsonProperty("s3_access_key")
private String s3AccessKey;
+ @NotNull
@JsonProperty("s3_secret_key")
private String s3SecretKey;
+ public LSServerInputS3File() {}
+
public LSServerInputS3File(InputDescriptor inputDescriptor) {
super(inputDescriptor);
InputS3FileDescriptor inputS3FileDescriptor = (InputS3FileDescriptor)inputDescriptor;
http://git-wip-us.apache.org/repos/asf/ambari/blob/93130e6b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerLogLevelFilter.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerLogLevelFilter.java b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerLogLevelFilter.java
index 2a00802..f79fafa 100644
--- a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerLogLevelFilter.java
+++ b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerLogLevelFilter.java
@@ -22,6 +22,8 @@ package org.apache.ambari.logsearch.model.common;
import java.util.Date;
import java.util.List;
+import javax.validation.constraints.NotNull;
+
import org.apache.ambari.logsearch.config.api.model.loglevelfilter.LogLevelFilter;
import io.swagger.annotations.ApiModel;
@@ -30,11 +32,23 @@ import io.swagger.annotations.ApiModelProperty;
@ApiModel
public class LSServerLogLevelFilter {
- @ApiModelProperty private String label;
- @ApiModelProperty private List<String> hosts;
- @ApiModelProperty private List<String> defaultLevels;
- @ApiModelProperty private List<String> overrideLevels;
- @ApiModelProperty private Date expiryTime;
+ @NotNull
+ @ApiModelProperty
+ private String label;
+
+ @NotNull
+ @ApiModelProperty
+ private List<String> hosts;
+
+ @NotNull
+ @ApiModelProperty
+ private List<String> defaultLevels;
+
+ @ApiModelProperty
+ private List<String> overrideLevels;
+
+ @ApiModelProperty
+ private Date expiryTime;
public LSServerLogLevelFilter() {}
http://git-wip-us.apache.org/repos/asf/ambari/blob/93130e6b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerLogLevelFilterMap.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerLogLevelFilterMap.java b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerLogLevelFilterMap.java
index 3088db1..8081a27 100644
--- a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerLogLevelFilterMap.java
+++ b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerLogLevelFilterMap.java
@@ -22,6 +22,9 @@ package org.apache.ambari.logsearch.model.common;
import java.util.Map;
import java.util.TreeMap;
+import javax.validation.Valid;
+import javax.validation.constraints.NotNull;
+
import org.apache.ambari.logsearch.config.api.model.loglevelfilter.LogLevelFilter;
import org.apache.ambari.logsearch.config.api.model.loglevelfilter.LogLevelFilterMap;
@@ -31,6 +34,8 @@ import io.swagger.annotations.ApiModelProperty;
@ApiModel
public class LSServerLogLevelFilterMap {
+ @Valid
+ @NotNull
@ApiModelProperty
private TreeMap<String, LSServerLogLevelFilter> filter;
http://git-wip-us.apache.org/repos/asf/ambari/blob/93130e6b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerMapDate.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerMapDate.java b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerMapDate.java
index dcacceb..3147402 100644
--- a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerMapDate.java
+++ b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerMapDate.java
@@ -19,6 +19,8 @@
package org.apache.ambari.logsearch.model.common;
+import javax.validation.constraints.NotNull;
+
import org.apache.ambari.logsearch.config.api.model.inputconfig.MapDateDescriptor;
import com.fasterxml.jackson.annotation.JsonInclude;
@@ -35,9 +37,12 @@ public class LSServerMapDate extends LSServerMapField {
@JsonProperty("source_date_pattern")
private String sourceDatePattern;
+ @NotNull
@JsonProperty("target_date_pattern")
private String targetDatePattern;
+ public LSServerMapDate() {}
+
public LSServerMapDate(MapDateDescriptor mapDateDescriptor) {
this.sourceDatePattern = mapDateDescriptor.getSourceDatePattern();
this.targetDatePattern = mapDateDescriptor.getTargetDatePattern();
http://git-wip-us.apache.org/repos/asf/ambari/blob/93130e6b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerMapFieldCopy.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerMapFieldCopy.java b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerMapFieldCopy.java
index b0bea83..ab12698 100644
--- a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerMapFieldCopy.java
+++ b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerMapFieldCopy.java
@@ -19,6 +19,8 @@
package org.apache.ambari.logsearch.model.common;
+import javax.validation.constraints.NotNull;
+
import org.apache.ambari.logsearch.config.api.model.inputconfig.MapFieldCopyDescriptor;
import com.fasterxml.jackson.annotation.JsonProperty;
@@ -32,9 +34,12 @@ public class LSServerMapFieldCopy extends LSServerMapField {
return "map_fieldcopy";
}
+ @NotNull
@JsonProperty("copy_name")
private String copyName;
+ public LSServerMapFieldCopy() {}
+
public LSServerMapFieldCopy(MapFieldCopyDescriptor mapFieldCopyDescriptor) {
this.copyName = mapFieldCopyDescriptor.getCopyName();
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/93130e6b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerMapFieldName.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerMapFieldName.java b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerMapFieldName.java
index 000b29d..ab7311c 100644
--- a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerMapFieldName.java
+++ b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerMapFieldName.java
@@ -19,6 +19,8 @@
package org.apache.ambari.logsearch.model.common;
+import javax.validation.constraints.NotNull;
+
import org.apache.ambari.logsearch.config.api.model.inputconfig.MapFieldNameDescriptor;
import com.fasterxml.jackson.annotation.JsonProperty;
@@ -32,9 +34,12 @@ public class LSServerMapFieldName extends LSServerMapField {
return "map_fieldname";
}
+ @NotNull
@JsonProperty("new_field_name")
private String newFieldName;
+ public LSServerMapFieldName() {}
+
public LSServerMapFieldName(MapFieldNameDescriptor mapFieldNameDescriptor) {
this.newFieldName = mapFieldNameDescriptor.getNewFieldName();
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/93130e6b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerMapFieldValue.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerMapFieldValue.java b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerMapFieldValue.java
index 6152de5..a7d3949 100644
--- a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerMapFieldValue.java
+++ b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerMapFieldValue.java
@@ -19,6 +19,8 @@
package org.apache.ambari.logsearch.model.common;
+import javax.validation.constraints.NotNull;
+
import org.apache.ambari.logsearch.config.api.model.inputconfig.MapFieldValueDescriptor;
import com.fasterxml.jackson.annotation.JsonProperty;
@@ -32,12 +34,16 @@ public class LSServerMapFieldValue extends LSServerMapField {
return "map_fieldvalue";
}
+ @NotNull
@JsonProperty("pre_value")
private String preValue;
+ @NotNull
@JsonProperty("post_value")
private String postValue;
+ public LSServerMapFieldValue() {}
+
public LSServerMapFieldValue(MapFieldValueDescriptor mapFieldValueDescriptor) {
this.preValue = mapFieldValueDescriptor.getPreValue();
this.postValue = mapFieldValueDescriptor.getPostValue();
http://git-wip-us.apache.org/repos/asf/ambari/blob/93130e6b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerPostMapValues.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerPostMapValues.java b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerPostMapValues.java
index 5f361c9..c62a9fd 100644
--- a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerPostMapValues.java
+++ b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerPostMapValues.java
@@ -22,6 +22,9 @@ package org.apache.ambari.logsearch.model.common;
import java.util.ArrayList;
import java.util.List;
+import javax.validation.Valid;
+import javax.validation.constraints.NotNull;
+
import org.apache.ambari.logsearch.config.api.model.inputconfig.MapDateDescriptor;
import org.apache.ambari.logsearch.config.api.model.inputconfig.MapFieldCopyDescriptor;
import org.apache.ambari.logsearch.config.api.model.inputconfig.MapFieldDescriptor;
@@ -29,30 +32,37 @@ import org.apache.ambari.logsearch.config.api.model.inputconfig.MapFieldNameDesc
import org.apache.ambari.logsearch.config.api.model.inputconfig.MapFieldValueDescriptor;
import org.apache.ambari.logsearch.config.api.model.inputconfig.PostMapValues;
-import com.fasterxml.jackson.databind.annotation.JsonSerialize;
-
import io.swagger.annotations.ApiModel;
@ApiModel
-@JsonSerialize(using = LSServerPostMapValuesSerializer.class)
public class LSServerPostMapValues {
+ @Valid
+ @NotNull
private List<LSServerMapField> mappers;
+ public LSServerPostMapValues() {}
+
public LSServerPostMapValues(PostMapValues pmv) {
mappers = new ArrayList<>();
for (MapFieldDescriptor mapFieldDescriptor : pmv.getMappers()) {
- if (mapFieldDescriptor instanceof MapDateDescriptor) {
- mappers.add(new LSServerMapDate((MapDateDescriptor)mapFieldDescriptor));
- } else if (mapFieldDescriptor instanceof MapFieldCopyDescriptor) {
- mappers.add(new LSServerMapFieldCopy((MapFieldCopyDescriptor)mapFieldDescriptor));
- } else if (mapFieldDescriptor instanceof MapFieldNameDescriptor) {
- mappers.add(new LSServerMapFieldName((MapFieldNameDescriptor)mapFieldDescriptor));
- } else if (mapFieldDescriptor instanceof MapFieldValueDescriptor) {
- mappers.add(new LSServerMapFieldValue((MapFieldValueDescriptor)mapFieldDescriptor));
- }
+ mappers.add(convert(mapFieldDescriptor));
}
}
+ private LSServerMapField convert(MapFieldDescriptor mapFieldDescriptor) {
+ if (mapFieldDescriptor instanceof MapDateDescriptor) {
+ return new LSServerMapDate((MapDateDescriptor)mapFieldDescriptor);
+ } else if (mapFieldDescriptor instanceof MapFieldCopyDescriptor) {
+ return new LSServerMapFieldCopy((MapFieldCopyDescriptor)mapFieldDescriptor);
+ } else if (mapFieldDescriptor instanceof MapFieldNameDescriptor) {
+ return new LSServerMapFieldName((MapFieldNameDescriptor)mapFieldDescriptor);
+ } else if (mapFieldDescriptor instanceof MapFieldValueDescriptor) {
+ return new LSServerMapFieldValue((MapFieldValueDescriptor)mapFieldDescriptor);
+ }
+
+ throw new IllegalArgumentException("Unknown mapper: " + mapFieldDescriptor.getClass());
+ }
+
public List<LSServerMapField> getMappers() {
return mappers;
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/93130e6b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerPostMapValuesList.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerPostMapValuesList.java b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerPostMapValuesList.java
new file mode 100644
index 0000000..2d29de0
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerPostMapValuesList.java
@@ -0,0 +1,59 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.ambari.logsearch.model.common;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.validation.Valid;
+import javax.validation.constraints.NotNull;
+
+import org.apache.ambari.logsearch.config.api.model.inputconfig.PostMapValues;
+
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+
+import io.swagger.annotations.ApiModel;
+
+@ApiModel
+@JsonSerialize(using = LSServerPostMapValuesListSerializer.class)
+@JsonDeserialize(using = LSServerPostMapValuesListDeserializer.class)
+public class LSServerPostMapValuesList {
+ @Valid
+ @NotNull
+ private List<LSServerPostMapValues> mapperLists;
+
+ public LSServerPostMapValuesList() {}
+
+ public LSServerPostMapValuesList(List<? extends PostMapValues> list) {
+ mapperLists = new ArrayList<>();
+ for (PostMapValues postMapValues : list) {
+ mapperLists.add(new LSServerPostMapValues(postMapValues));
+ }
+ }
+
+ public List<LSServerPostMapValues> getMappersList() {
+ return mapperLists;
+ }
+
+ public void setMappersList(List<LSServerPostMapValues> mapperLists) {
+ this.mapperLists = mapperLists;
+ }
+}
http://git-wip-us.apache.org/repos/asf/ambari/blob/93130e6b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerPostMapValuesListDeserializer.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerPostMapValuesListDeserializer.java b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerPostMapValuesListDeserializer.java
new file mode 100644
index 0000000..18744e2
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerPostMapValuesListDeserializer.java
@@ -0,0 +1,79 @@
+/*
+ * 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.model.common;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import com.fasterxml.jackson.core.JsonParser;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.core.ObjectCodec;
+import com.fasterxml.jackson.core.TreeNode;
+import com.fasterxml.jackson.databind.DeserializationContext;
+import com.fasterxml.jackson.databind.JsonDeserializer;
+import com.fasterxml.jackson.databind.JsonNode;
+
+public class LSServerPostMapValuesListDeserializer extends JsonDeserializer<LSServerPostMapValuesList> {
+ @Override
+ public LSServerPostMapValuesList deserialize(JsonParser jp, DeserializationContext ctxt)
+ throws IOException, JsonProcessingException {
+ ObjectCodec oc = jp.getCodec();
+ JsonNode node = oc.readTree(jp);
+
+ List<LSServerPostMapValues> mappersList = new ArrayList<>();
+ for (JsonNode childNode : node) {
+ List<LSServerMapField> mappers = new ArrayList<>();
+ for (Iterator<Map.Entry<String, JsonNode>> i = childNode.fields(); i.hasNext();) {
+ Map.Entry<String, JsonNode> mapperData = i.next();
+ String mapperType = mapperData.getKey();
+ JsonNode mapperProperties = mapperData.getValue();
+ switch (mapperType) {
+ case "map_date" :
+ LSServerMapDate mapDate = oc.treeToValue((TreeNode)mapperProperties, LSServerMapDate.class);
+ mappers.add(mapDate);
+ break;
+ case "map_fieldname" :
+ LSServerMapFieldName mapFieldName = oc.treeToValue((TreeNode)mapperProperties, LSServerMapFieldName.class);
+ mappers.add(mapFieldName);
+ break;
+ case "map_fieldvalue" :
+ LSServerMapFieldValue mapFieldValue = oc.treeToValue((TreeNode)mapperProperties, LSServerMapFieldValue.class);
+ mappers.add(mapFieldValue);
+ break;
+ case "map_fieldcopy" :
+ LSServerMapFieldCopy mapFieldCopy = oc.treeToValue((TreeNode)mapperProperties, LSServerMapFieldCopy.class);
+ mappers.add(mapFieldCopy);
+ break;
+ }
+ }
+
+ LSServerPostMapValues lsServerPostMapValues = new LSServerPostMapValues();
+ lsServerPostMapValues.setMappers(mappers);
+ mappersList.add(lsServerPostMapValues);
+ }
+
+ LSServerPostMapValuesList lsServerPostMapValuesList = new LSServerPostMapValuesList();
+ lsServerPostMapValuesList.setMappersList(mappersList);
+ return lsServerPostMapValuesList;
+ }
+}
http://git-wip-us.apache.org/repos/asf/ambari/blob/93130e6b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerPostMapValuesListSerializer.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerPostMapValuesListSerializer.java b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerPostMapValuesListSerializer.java
new file mode 100644
index 0000000..bb1eadf
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerPostMapValuesListSerializer.java
@@ -0,0 +1,44 @@
+/*
+ * 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.model.common;
+
+import java.io.IOException;
+
+import com.fasterxml.jackson.core.JsonGenerator;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.JsonSerializer;
+import com.fasterxml.jackson.databind.SerializerProvider;
+
+public class LSServerPostMapValuesListSerializer extends JsonSerializer<LSServerPostMapValuesList> {
+ @Override
+ public void serialize(LSServerPostMapValuesList value, JsonGenerator jgen, SerializerProvider provider)
+ throws IOException, JsonProcessingException {
+ jgen.writeStartArray();
+ for (LSServerPostMapValues postMapValues : value.getMappersList()) {
+ jgen.writeStartObject();
+ for (LSServerMapField mapField : postMapValues.getMappers()) {
+ jgen.writeObjectField(mapField.getName(), mapField);
+ }
+ jgen.writeEndObject();
+ }
+
+ jgen.writeEndArray();
+ }
+}
http://git-wip-us.apache.org/repos/asf/ambari/blob/93130e6b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerPostMapValuesSerializer.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerPostMapValuesSerializer.java b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerPostMapValuesSerializer.java
deleted file mode 100644
index 7543677..0000000
--- a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerPostMapValuesSerializer.java
+++ /dev/null
@@ -1,39 +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.model.common;
-
-import java.io.IOException;
-
-import com.fasterxml.jackson.core.JsonGenerator;
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.JsonSerializer;
-import com.fasterxml.jackson.databind.SerializerProvider;
-
-public class LSServerPostMapValuesSerializer extends JsonSerializer<LSServerPostMapValues> {
- @Override
- public void serialize(LSServerPostMapValues value, JsonGenerator jgen, SerializerProvider provider)
- throws IOException, JsonProcessingException {
- jgen.writeStartObject();
- for (LSServerMapField mapField : value.getMappers()) {
- jgen.writeObjectField(mapField.getName(), mapField);
- }
- jgen.writeEndObject();
- }
-}
http://git-wip-us.apache.org/repos/asf/ambari/blob/93130e6b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/rest/ShipperConfigResource.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/rest/ShipperConfigResource.java b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/rest/ShipperConfigResource.java
index a7d99c9..71da326 100644
--- a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/rest/ShipperConfigResource.java
+++ b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/rest/ShipperConfigResource.java
@@ -21,6 +21,8 @@ package org.apache.ambari.logsearch.rest;
import javax.inject.Inject;
import javax.inject.Named;
+import javax.validation.Valid;
+import javax.validation.executable.ValidateOnExecution;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
@@ -75,18 +77,20 @@ public class ShipperConfigResource {
@Path("/input/{clusterName}/services/{serviceName}")
@Produces({"application/json"})
@ApiOperation(SET_SHIPPER_CONFIG_OD)
- public Response createShipperConfig(String body, @PathParam("clusterName") String clusterName, @PathParam("serviceName")
- String serviceName) {
- return shipperConfigManager.createInputConfig(clusterName, serviceName, body);
+ @ValidateOnExecution
+ public Response createShipperConfig(@Valid LSServerInputConfig request, @PathParam("clusterName") String clusterName,
+ @PathParam("serviceName") String serviceName) {
+ return shipperConfigManager.createInputConfig(clusterName, serviceName, request);
}
@PUT
@Path("/input/{clusterName}/services/{serviceName}")
@Produces({"application/json"})
@ApiOperation(SET_SHIPPER_CONFIG_OD)
- public Response setShipperConfig(String body, @PathParam("clusterName") String clusterName, @PathParam("serviceName")
- String serviceName) {
- return shipperConfigManager.setInputConfig(clusterName, serviceName, body);
+ @ValidateOnExecution
+ public Response setShipperConfig(@Valid LSServerInputConfig request, @PathParam("clusterName") String clusterName,
+ @PathParam("serviceName") String serviceName) {
+ return shipperConfigManager.setInputConfig(clusterName, serviceName, request);
}
@GET
@@ -101,7 +105,8 @@ public class ShipperConfigResource {
@Path("/filters/{clusterName}/level")
@Produces({"application/json"})
@ApiOperation(UPDATE_LOG_LEVEL_FILTER_OD)
- public Response setLogLevelFilter(LSServerLogLevelFilterMap request, @PathParam("clusterName") String clusterName) {
+ @ValidateOnExecution
+ public Response setLogLevelFilter(@Valid LSServerLogLevelFilterMap request, @PathParam("clusterName") String clusterName) {
return shipperConfigManager.setLogLevelFilters(clusterName, request);
}