This is an automated email from the ASF dual-hosted git repository. jihao pushed a commit to branch anomalies-pagination in repository https://gitbox.apache.org/repos/asf/incubator-pinot.git
commit d37df19fe9baa1633499a5db30c88a75e851c212 Author: Jihao Zhang <jizh...@linkedin.com> AuthorDate: Wed Jul 29 16:06:53 2020 -0700 anomaly searcher --- .../thirdeye/constant/AnomalyFeedbackType.java | 2 +- .../v2/anomalies/AnomalySearchFilter.java | 18 ++++++++++----- .../v2/anomalies/AnomalySearchResource.java | 8 +++---- .../resources/v2/anomalies/AnomalySearcher.java | 26 +++++++++++++++++----- .../datalayer/entity/MergedAnomalyResultIndex.java | 6 ++--- .../src/main/resources/schema/create-schema.sql | 2 +- 6 files changed, 41 insertions(+), 21 deletions(-) diff --git a/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/constant/AnomalyFeedbackType.java b/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/constant/AnomalyFeedbackType.java index c6c7bfa..93675dd 100644 --- a/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/constant/AnomalyFeedbackType.java +++ b/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/constant/AnomalyFeedbackType.java @@ -47,4 +47,4 @@ public enum AnomalyFeedbackType { public boolean isUnresolved() { return this.equals(NO_FEEDBACK); } -} +} \ No newline at end of file diff --git a/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/dashboard/resources/v2/anomalies/AnomalySearchFilter.java b/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/dashboard/resources/v2/anomalies/AnomalySearchFilter.java index 1ff7de8..fbc17e8 100644 --- a/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/dashboard/resources/v2/anomalies/AnomalySearchFilter.java +++ b/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/dashboard/resources/v2/anomalies/AnomalySearchFilter.java @@ -9,11 +9,12 @@ public class AnomalySearchFilter { private final List<String> detectionNames; private final List<String> metrics; private final List<String> datasets; - private final long startTime; - private final long endTime; + private final List<Long> anomalyIds; + private final Long startTime; + private final Long endTime; - public AnomalySearchFilter(long startTime, long endTime, List<String> feedbacks, List<String> subscriptionGroups, List<String> detectionNames, - List<String> metrics, List<String> datasets) { + public AnomalySearchFilter(Long startTime, Long endTime, List<String> feedbacks, List<String> subscriptionGroups, List<String> detectionNames, + List<String> metrics, List<String> datasets, List<Long> anomalyIds) { this.feedbacks = feedbacks; this.subscriptionGroups = subscriptionGroups; this.detectionNames = detectionNames; @@ -21,13 +22,14 @@ public class AnomalySearchFilter { this.datasets = datasets; this.startTime = startTime; this.endTime = endTime; + this.anomalyIds = anomalyIds; } - public long getStartTime() { + public Long getStartTime() { return startTime; } - public long getEndTime() { + public Long getEndTime() { return endTime; } @@ -50,4 +52,8 @@ public class AnomalySearchFilter { public List<String> getDatasets() { return datasets; } + + public List<Long> getAnomalyIds() { + return anomalyIds; + } } diff --git a/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/dashboard/resources/v2/anomalies/AnomalySearchResource.java b/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/dashboard/resources/v2/anomalies/AnomalySearchResource.java index adfa5f9..74772a6 100644 --- a/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/dashboard/resources/v2/anomalies/AnomalySearchResource.java +++ b/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/dashboard/resources/v2/anomalies/AnomalySearchResource.java @@ -28,13 +28,13 @@ public class AnomalySearchResource { @Produces(MediaType.APPLICATION_JSON) @ApiOperation("Search and paginate anomalies according to the parameters") public Response findAlerts(@QueryParam("limit") @DefaultValue("10") int limit, - @QueryParam("offset") @DefaultValue("0") int offset, @QueryParam("startTime") long startTime, - @QueryParam("endTime") long endTime, @QueryParam("feedbackStatus") List<String> feedbacks, + @QueryParam("offset") @DefaultValue("0") int offset, @QueryParam("startTime") Long startTime, + @QueryParam("endTime") Long endTime, @QueryParam("feedbackStatus") List<String> feedbacks, @QueryParam("subscriptionGroup") List<String> subscriptionGroups, @QueryParam("detectionName") List<String> detectionNames, @QueryParam("metric") List<String> metrics, - @QueryParam("dataset") List<String> datasets) { + @QueryParam("dataset") List<String> datasets, @QueryParam("anomalyId") List<Long> anomalyIds) { AnomalySearchFilter searchFilter = - new AnomalySearchFilter(startTime, endTime, feedbacks, subscriptionGroups, detectionNames, metrics, datasets); + new AnomalySearchFilter(startTime, endTime, feedbacks, subscriptionGroups, detectionNames, metrics, datasets, anomalyIds); return Response.ok().entity(this.anomalySearcher.search(searchFilter, limit, offset)).build(); } } diff --git a/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/dashboard/resources/v2/anomalies/AnomalySearcher.java b/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/dashboard/resources/v2/anomalies/AnomalySearcher.java index 6efad8f..bc29228 100644 --- a/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/dashboard/resources/v2/anomalies/AnomalySearcher.java +++ b/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/dashboard/resources/v2/anomalies/AnomalySearcher.java @@ -4,6 +4,7 @@ import com.google.common.collect.ImmutableMap; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; +import java.util.Comparator; import java.util.HashSet; import java.util.List; import java.util.Map; @@ -13,6 +14,7 @@ import org.apache.pinot.thirdeye.constant.AnomalyFeedbackType; import org.apache.pinot.thirdeye.datalayer.bao.DetectionAlertConfigManager; import org.apache.pinot.thirdeye.datalayer.bao.DetectionConfigManager; import org.apache.pinot.thirdeye.datalayer.bao.MergedAnomalyResultManager; +import org.apache.pinot.thirdeye.datalayer.dto.AbstractDTO; import org.apache.pinot.thirdeye.datalayer.dto.MergedAnomalyResultDTO; import org.apache.pinot.thirdeye.datalayer.pojo.DetectionConfigBean; import org.apache.pinot.thirdeye.datalayer.util.Predicate; @@ -41,9 +43,13 @@ public class AnomalySearcher { * @return the result */ public Map<String, Object> search(AnomalySearchFilter searchFilter, int limit, int offset) { - Predicate predicate = Predicate.AND(Predicate.LT("startTime", searchFilter.getEndTime()), - Predicate.GT("endTime", searchFilter.getStartTime())); -//, Predicate.NEQ("isChild", false) + Predicate predicate = Predicate.EQ("child", false); + if (searchFilter.getStartTime() != null) { + predicate = Predicate.AND(predicate, Predicate.LT("startTime", searchFilter.getEndTime())); + } + if (searchFilter.getEndTime() != null) { + predicate = Predicate.AND(predicate, Predicate.GT("endTime", searchFilter.getStartTime())); + } // search by detections or subscription groups Set<Long> detectionConfigIds = new HashSet<>(); Set<Long> subscribedDetectionConfigIds = new HashSet<>(); @@ -89,13 +95,20 @@ public class AnomalySearcher { if (!searchFilter.getMetrics().isEmpty()) { predicate = Predicate.AND(predicate, Predicate.IN("metric", searchFilter.getMetrics().toArray())); } + // search by ids + if (!searchFilter.getAnomalyIds().isEmpty()) { + predicate = Predicate.AND(predicate, Predicate.IN("baseId", searchFilter.getAnomalyIds().toArray())); + } long count; List<MergedAnomalyResultDTO> results; if (searchFilter.getFeedbacks().isEmpty()) { - List<Long> anomalyIds = this.anomalyDAO.findIdsByPredicate(predicate); + List<Long> anomalyIds = this.anomalyDAO.findIdsByPredicate(predicate) + .stream() + .sorted(Comparator.reverseOrder()) + .collect(Collectors.toList()); count = anomalyIds.size(); - results = this.anomalyDAO.findByIds(paginateResults(anomalyIds, offset, limit)); + results = anomalyIds.isEmpty() ? Collections.emptyList() : this.anomalyDAO.findByIds(paginateResults(anomalyIds, offset, limit)); } else { // filter by feedback types List<MergedAnomalyResultDTO> anomalies = this.anomalyDAO.findByPredicate(predicate); @@ -104,6 +117,7 @@ public class AnomalySearcher { results = anomalies.stream() .filter(anomaly -> (anomaly.getFeedback() == null && feedbackFilters.contains(NO_FEEDBACK)) || ( anomaly.getFeedback() != null && feedbackFilters.contains(anomaly.getFeedback().getFeedbackType()))) + .sorted(Comparator.comparingLong(AbstractDTO::getId).reversed()) .collect(Collectors.toList()); count = results.size(); results = paginateResults(results, offset, limit); @@ -111,7 +125,7 @@ public class AnomalySearcher { return ImmutableMap.of("count", count, "limit", limit, "offset", offset, "elements", results); } - private <T> List<T> paginateResults(List<T> list, int offset, int limit) { + private <T> List<T> paginateResults(List<T> list, int offset, int limit) { if (offset > list.size()) { // requested page is out of bound return Collections.emptyList(); diff --git a/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/datalayer/entity/MergedAnomalyResultIndex.java b/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/datalayer/entity/MergedAnomalyResultIndex.java index d5941d9..cfa5c68 100644 --- a/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/datalayer/entity/MergedAnomalyResultIndex.java +++ b/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/datalayer/entity/MergedAnomalyResultIndex.java @@ -35,7 +35,7 @@ public class MergedAnomalyResultIndex extends AbstractIndexEntity { String metric; DimensionMap dimensions; boolean notified; - boolean isChild; + boolean child; public long getDetectionConfigId() { return detectionConfigId; @@ -118,10 +118,10 @@ public class MergedAnomalyResultIndex extends AbstractIndexEntity { } public boolean isChild() { - return isChild; + return child; } public void setChild(boolean child) { - isChild = child; + this.child = child; } } diff --git a/thirdeye/thirdeye-pinot/src/main/resources/schema/create-schema.sql b/thirdeye/thirdeye-pinot/src/main/resources/schema/create-schema.sql index 88c74a1..8454348 100644 --- a/thirdeye/thirdeye-pinot/src/main/resources/schema/create-schema.sql +++ b/thirdeye/thirdeye-pinot/src/main/resources/schema/create-schema.sql @@ -110,7 +110,7 @@ create table if not exists merged_anomaly_result_index ( base_id bigint(20) not null, create_time timestamp, update_time timestamp default current_timestamp, - is_child boolean, + child boolean, version int(10) ) ENGINE=InnoDB; create index merged_anomaly_result_function_idx on merged_anomaly_result_index(function_id); --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@pinot.apache.org For additional commands, e-mail: commits-h...@pinot.apache.org