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 <[email protected]> Authored: Mon May 29 12:06:25 2017 +0200 Committer: Miklos Gergely <[email protected]> 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); }
