package com.hubspot.singularity.api; import java.util.Collections; import java.util.List; import java.util.Map; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonProperty; import com.google.common.base.Optional; import com.wordnik.swagger.annotations.ApiModelProperty; public class SingularityS3SearchRequest { private final Map<String, List<String>> requestsAndDeploys; private final List<String> taskIds; private final Optional<Long> start; private final Optional<Long> end; private final boolean excludeMetadata; private final boolean listOnly; private final Optional<Integer> maxPerPage; private final Map<String, ContinuationToken> continuationTokens; @JsonCreator public SingularityS3SearchRequest(@JsonProperty("requestsAndDeploys") Map<String, List<String>> requestsAndDeploys, @JsonProperty("taskIds") List<String> taskIds, @JsonProperty("start") Optional<Long> start, @JsonProperty("end") Optional<Long> end, @JsonProperty("excludeMetadata") boolean excludeMetadata, @JsonProperty("listOnly") boolean listOnly, @JsonProperty("maxPerPage") Optional<Integer> maxPerPage, @JsonProperty("continuationTokens") Map<String, ContinuationToken> continuationTokens) { this.requestsAndDeploys = requestsAndDeploys != null ? requestsAndDeploys : Collections.<String, List<String>>emptyMap(); this.taskIds = taskIds != null ? taskIds : Collections.<String>emptyList(); this.start = start; this.end = end; this.excludeMetadata = excludeMetadata; this.listOnly = listOnly; this.maxPerPage = maxPerPage; this.continuationTokens = continuationTokens != null ? continuationTokens : Collections.<String, ContinuationToken>emptyMap(); } @ApiModelProperty(required=false, value="A map of request IDs to a list of deploy ids to search") public Map<String, List<String>> getRequestsAndDeploys() { return requestsAndDeploys; } @ApiModelProperty(required=false, value="A list of task IDs to search for") public List<String> getTaskIds() { return taskIds; } @ApiModelProperty(required=false, value="Start timestamp (millis, 13 digit)") public Optional<Long> getStart() { return start; } @ApiModelProperty(required=false, value="End timestamp (millis, 13 digit)") public Optional<Long> getEnd() { return end; } @ApiModelProperty(required=false, value="if true, do not query for custom start/end time metadata") public boolean isExcludeMetadata() { return excludeMetadata; } @ApiModelProperty(required=false, value="If true, do not generate download/get urls, only list objects") public boolean isListOnly() { return listOnly; } /** * NOTE: maxPerPage is not a guaranteed value. It is possible to get as many as (maxPerPage * 2 - 1) results * when using the paginated search endpoint */ @ApiModelProperty(required=false, value="Target number of results to return") public Optional<Integer> getMaxPerPage() { return maxPerPage; } @ApiModelProperty(required=false, value="S3 continuation tokens, return these to Singularity to continue searching subsequent pages of results") public Map<String, ContinuationToken> getContinuationTokens() { return continuationTokens; } @Override public String toString() { return "SingularityS3SearchRequest{" + "requestsAndDeploys=" + requestsAndDeploys + ", taskIds=" + taskIds + ", start=" + start + ", end=" + end + ", excludeMetadata=" + excludeMetadata + ", listOnly=" + listOnly + ", maxPerPage=" + maxPerPage + ", continuationTokens=" + continuationTokens + '}'; } }