You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pinot.apache.org by ji...@apache.org on 2020/05/26 17:19:18 UTC

[incubator-pinot] branch master updated: [TE] endpoints for alerts page filters (#5432)

This is an automated email from the ASF dual-hosted git repository.

jihao pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-pinot.git


The following commit(s) were added to refs/heads/master by this push:
     new 4270def  [TE] endpoints for alerts page filters (#5432)
4270def is described below

commit 4270defa916eab338e461c2537204e8f321fc834
Author: Jihao Zhang <ji...@linkedin.com>
AuthorDate: Tue May 26 10:17:59 2020 -0700

    [TE] endpoints for alerts page filters (#5432)
    
    This commit adds the endpoints for the filters in the new alert list page.
    
    Auto-complete for detections, subscription groups, applications, and alert owners.
    Search for the alerts that are subscribed by a user.
    The endpoints to return a list of all rules in the detection pipeline.
---
 .../dashboard/ThirdEyeDashboardApplication.java    |  2 +-
 .../dashboard/resources/v2/DataResource.java       | 98 +++++++++++++++++++---
 .../resources/v2/alerts/AlertResource.java         |  6 +-
 .../resources/v2/alerts/AlertSearchFilter.java     | 17 +++-
 .../resources/v2/alerts/AlertSearcher.java         | 29 +++++--
 .../DetectionConfigurationResource.java            | 28 +++++--
 .../resources/v2/alerts/AlertSearcherTest.java     |  2 +-
 7 files changed, 152 insertions(+), 30 deletions(-)

diff --git a/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/dashboard/ThirdEyeDashboardApplication.java b/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/dashboard/ThirdEyeDashboardApplication.java
index ccd70d3..97e24b5 100644
--- a/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/dashboard/ThirdEyeDashboardApplication.java
+++ b/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/dashboard/ThirdEyeDashboardApplication.java
@@ -75,7 +75,7 @@ import org.apache.pinot.thirdeye.datasource.loader.DefaultTimeSeriesLoader;
 import org.apache.pinot.thirdeye.datasource.loader.TimeSeriesLoader;
 import org.apache.pinot.thirdeye.datasource.sql.resources.SqlDataSourceResource;
 import org.apache.pinot.thirdeye.detection.DetectionResource;
-import org.apache.pinot.thirdeye.detection.annotation.DetectionConfigurationResource;
+import org.apache.pinot.thirdeye.detection.DetectionConfigurationResource;
 import org.apache.pinot.thirdeye.detection.yaml.YamlResource;
 import org.apache.pinot.thirdeye.detector.email.filter.AlertFilterFactory;
 import org.apache.pinot.thirdeye.detector.function.AnomalyFunctionFactory;
diff --git a/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/dashboard/resources/v2/DataResource.java b/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/dashboard/resources/v2/DataResource.java
index 34b8b5a..8b81e66 100644
--- a/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/dashboard/resources/v2/DataResource.java
+++ b/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/dashboard/resources/v2/DataResource.java
@@ -19,7 +19,10 @@
 
 package org.apache.pinot.thirdeye.dashboard.resources.v2;
 
-import org.apache.pinot.thirdeye.api.Constants;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.google.common.base.Strings;
+import com.google.common.cache.LoadingCache;
+import com.google.common.collect.Multimap;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
@@ -36,8 +39,9 @@ import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.TreeSet;
 import java.util.concurrent.TimeUnit;
-
+import java.util.stream.Collectors;
 import javax.ws.rs.GET;
 import javax.ws.rs.Path;
 import javax.ws.rs.PathParam;
@@ -45,17 +49,8 @@ import javax.ws.rs.Produces;
 import javax.ws.rs.QueryParam;
 import javax.ws.rs.WebApplicationException;
 import javax.ws.rs.core.MediaType;
-
 import org.apache.commons.lang3.StringUtils;
-import org.joda.time.DateTime;
-import org.joda.time.DateTimeZone;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.google.common.base.Strings;
-import com.google.common.cache.LoadingCache;
-import com.google.common.collect.Multimap;
+import org.apache.pinot.thirdeye.api.Constants;
 import org.apache.pinot.thirdeye.common.time.TimeRange;
 import org.apache.pinot.thirdeye.dashboard.Utils;
 import org.apache.pinot.thirdeye.dashboard.views.heatmap.HeatMapViewHandler;
@@ -63,13 +58,23 @@ import org.apache.pinot.thirdeye.dashboard.views.heatmap.HeatMapViewRequest;
 import org.apache.pinot.thirdeye.dashboard.views.heatmap.HeatMapViewResponse;
 import org.apache.pinot.thirdeye.datalayer.bao.AlertConfigManager;
 import org.apache.pinot.thirdeye.datalayer.bao.AnomalyFunctionManager;
+import org.apache.pinot.thirdeye.datalayer.bao.ApplicationManager;
 import org.apache.pinot.thirdeye.datalayer.bao.DatasetConfigManager;
+import org.apache.pinot.thirdeye.datalayer.bao.DetectionAlertConfigManager;
+import org.apache.pinot.thirdeye.datalayer.bao.DetectionConfigManager;
 import org.apache.pinot.thirdeye.datalayer.bao.MetricConfigManager;
 import org.apache.pinot.thirdeye.datalayer.dto.AlertConfigDTO;
 import org.apache.pinot.thirdeye.datalayer.dto.AnomalyFunctionDTO;
+import org.apache.pinot.thirdeye.datalayer.dto.ApplicationDTO;
 import org.apache.pinot.thirdeye.datalayer.dto.DatasetConfigDTO;
+import org.apache.pinot.thirdeye.datalayer.dto.DetectionAlertConfigDTO;
+import org.apache.pinot.thirdeye.datalayer.dto.DetectionConfigDTO;
 import org.apache.pinot.thirdeye.datalayer.dto.MergedAnomalyResultDTO;
 import org.apache.pinot.thirdeye.datalayer.dto.MetricConfigDTO;
+import org.apache.pinot.thirdeye.datalayer.pojo.ApplicationBean;
+import org.apache.pinot.thirdeye.datalayer.pojo.DetectionAlertConfigBean;
+import org.apache.pinot.thirdeye.datalayer.pojo.DetectionConfigBean;
+import org.apache.pinot.thirdeye.datalayer.util.Predicate;
 import org.apache.pinot.thirdeye.datasource.DAORegistry;
 import org.apache.pinot.thirdeye.datasource.MetricExpression;
 import org.apache.pinot.thirdeye.datasource.ThirdEyeCacheRegistry;
@@ -77,6 +82,11 @@ import org.apache.pinot.thirdeye.datasource.cache.QueryCache;
 import org.apache.pinot.thirdeye.detector.email.filter.AlertFilterFactory;
 import org.apache.pinot.thirdeye.detector.function.AnomalyFunctionFactory;
 import org.apache.pinot.thirdeye.util.ThirdEyeUtils;
+import org.joda.time.DateTime;
+import org.joda.time.DateTimeZone;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 
 /**
  * Do's and Dont's
@@ -103,6 +113,9 @@ public class DataResource {
   private final DatasetConfigManager datasetConfigDAO;
   private final AnomalyFunctionManager anomalyFunctionDAO;
   private final AlertConfigManager alertConfigDAO;
+  private final DetectionConfigManager detectionConfigDAO;
+  private final DetectionAlertConfigManager detectionAlertConfigDAO;
+  private final ApplicationManager applicationManager;
 
   private final LoadingCache<String, Long> collectionMaxDataTimeCache;
   private final LoadingCache<String, String> dimensionsFilterCache;
@@ -114,6 +127,9 @@ public class DataResource {
     this.datasetConfigDAO = DAO_REGISTRY.getDatasetConfigDAO();
     this.anomalyFunctionDAO = DAO_REGISTRY.getAnomalyFunctionDAO();
     this.alertConfigDAO = DAO_REGISTRY.getAlertConfigDAO();
+    this.detectionConfigDAO = DAO_REGISTRY.getDetectionConfigManager();
+    this.detectionAlertConfigDAO = DAO_REGISTRY.getDetectionAlertConfigManager();
+    this.applicationManager = DAO_REGISTRY.getApplicationDAO();
 
     this.queryCache = CACHE_REGISTRY_INSTANCE.getQueryCache();
     this.collectionMaxDataTimeCache = CACHE_REGISTRY_INSTANCE.getDatasetMaxDataTimeCache();
@@ -194,6 +210,64 @@ public class DataResource {
   }
 
   /**
+   * Gets detection configs where name like.
+   *
+   * @param name the name
+   * @return the detections where name like
+   */
+  @GET
+  @Path("autocomplete/detection")
+  public List<DetectionConfigDTO> getDetectionsWhereNameLike(@ApiParam("detection name") @QueryParam("name") String name) {
+    List<DetectionConfigDTO> result = this.detectionConfigDAO.findByPredicate(Predicate.LIKE("name", "%" + name.trim() + "%"));
+    result.sort(Comparator.comparing(DetectionConfigBean::getName));
+    return result;
+  }
+
+  /**
+   * Gets subscription groups where name like.
+   *
+   * @param name the name
+   * @return the subscription where name like
+   */
+  @GET
+  @Path("autocomplete/subscription")
+  public List<DetectionAlertConfigDTO> getSubscriptionWhereNameLike(@QueryParam("name") String name) {
+    List<DetectionAlertConfigDTO> result = this.detectionAlertConfigDAO.findByPredicate(Predicate.LIKE("name", "%" + name.trim() + "%"));
+    result.sort(Comparator.comparing(DetectionAlertConfigBean::getName));
+    return result;
+  }
+
+  /**
+   * Gets applications where name like.
+   *
+   * @param name the name
+   * @return the applications where name like
+   */
+  @GET
+  @Path("autocomplete/application")
+  public List<ApplicationDTO> getApplicationsWhereNameLike(@QueryParam("name") String name) {
+    List<ApplicationDTO> result = this.applicationManager.findByPredicate(Predicate.LIKE("application", "%" + name.trim() + "%"));
+    result.sort(Comparator.comparing(ApplicationBean::getApplication));
+    return result;
+  }
+
+  /**
+   * Gets detection config creators where name like.
+   *
+   * @param name the name
+   * @return the created bys where name like
+   */
+  @GET
+  @Path("autocomplete/detection-createdby")
+  public Set<String> getCreatedBysWhereNameLike(@QueryParam("name") String name) {
+    List<DetectionConfigDTO> result = this.detectionConfigDAO.findByPredicate(Predicate.LIKE("createdBy", "%" + name.trim() + "%"));
+    return result.stream()
+        .map(DetectionConfigBean::getCreatedBy)
+        .sorted()
+        .collect(Collectors.toCollection(TreeSet::new));
+  }
+
+  /**
    * Returns list of Anomaly functions matching given name
    * @param name
    * @return
diff --git a/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/dashboard/resources/v2/alerts/AlertResource.java b/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/dashboard/resources/v2/alerts/AlertResource.java
index 1bc4f93..e7395b0e 100644
--- a/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/dashboard/resources/v2/alerts/AlertResource.java
+++ b/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/dashboard/resources/v2/alerts/AlertResource.java
@@ -58,6 +58,7 @@ public class AlertResource {
    * @param subscriptionGroups the subscription groups for the alerts
    * @param names the names for the alerts
    * @param createdBy the owners for the alerts
+   * @param subscribedBy the subscriber for the alerts
    * @param ruleTypes the rule types for the alerts
    * @param metrics the metrics for the alerts
    * @param datasets the datasets for the alerts
@@ -70,10 +71,11 @@ public class AlertResource {
   public Response findAlerts(@QueryParam("limit") @DefaultValue("10") long limit,
       @QueryParam("offset") @DefaultValue("0") long offset, @QueryParam("application") List<String> applications,
       @QueryParam("subscriptionGroup") List<String> subscriptionGroups, @QueryParam("names") List<String> names,
-      @QueryParam("createdBy") List<String> createdBy, @QueryParam("ruleType") List<String> ruleTypes,
+      @QueryParam("createdBy") List<String> createdBy, @QueryParam("subscribedBy") List<String> subscribedBy, @QueryParam("ruleType") List<String> ruleTypes,
       @QueryParam("metric") List<String> metrics, @QueryParam("dataset") List<String> datasets,
       @QueryParam("active") Boolean active) {
-    AlertSearchFilter searchFilter = new AlertSearchFilter(applications, subscriptionGroups, names, createdBy, ruleTypes, metrics, datasets, active);
+    AlertSearchFilter searchFilter =
+        new AlertSearchFilter(applications, subscriptionGroups, names, createdBy, subscribedBy, ruleTypes, metrics, datasets, active);
     return Response.ok().entity(this.alertSearcher.search(searchFilter, limit, offset)).build();
   }
 }
diff --git a/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/dashboard/resources/v2/alerts/AlertSearchFilter.java b/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/dashboard/resources/v2/alerts/AlertSearchFilter.java
index 0c488ff..52bb3ee 100644
--- a/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/dashboard/resources/v2/alerts/AlertSearchFilter.java
+++ b/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/dashboard/resources/v2/alerts/AlertSearchFilter.java
@@ -31,6 +31,7 @@ public class AlertSearchFilter {
   private final List<String> applications;
   private final List<String> subscriptionGroups;
   private final List<String> createdBy;
+  private final List<String> subscribedBy;
   private final List<String> ruleTypes;
   private final List<String> metrics;
   private final List<String> datasets;
@@ -41,6 +42,7 @@ public class AlertSearchFilter {
     this.applications = Collections.emptyList();
     this.subscriptionGroups = Collections.emptyList();
     this.createdBy = Collections.emptyList();
+    this.subscribedBy = Collections.emptyList();
     this.ruleTypes = Collections.emptyList();
     this.datasets = Collections.emptyList();
     this.metrics = Collections.emptyList();
@@ -55,17 +57,19 @@ public class AlertSearchFilter {
    * @param subscriptionGroups the subscription groups
    * @param names the names
    * @param createdBy the createdBy
+   * @param subscribedBy the subscribed by
    * @param ruleTypes the rule types
    * @param metrics the metrics
    * @param datasets the datasets
    * @param active the active
    */
   public AlertSearchFilter(List<String> applications, List<String> subscriptionGroups, List<String> names,
-      List<String> createdBy, List<String> ruleTypes, List<String> metrics, List<String> datasets, Boolean active) {
+      List<String> createdBy, List<String> subscribedBy, List<String> ruleTypes, List<String> metrics, List<String> datasets, Boolean active) {
     this.applications = applications;
     this.subscriptionGroups = subscriptionGroups;
     this.names = names;
     this.createdBy = createdBy;
+    this.subscribedBy = subscribedBy;
     this.ruleTypes = ruleTypes;
     this.metrics = metrics;
     this.datasets = datasets;
@@ -100,6 +104,15 @@ public class AlertSearchFilter {
   }
 
   /**
+   * Gets subscribedBy.
+   *
+   * @return the subscribedBy
+   */
+  public List<String> getSubscribedBy() {
+    return subscribedBy;
+  }
+
+  /**
    * Gets rule types.
    *
    * @return the rule types
@@ -151,7 +164,7 @@ public class AlertSearchFilter {
    */
   public boolean isEmpty() {
     return this.applications.isEmpty() && this.subscriptionGroups.isEmpty() && this.names.isEmpty()
-        && this.createdBy.isEmpty() && this.ruleTypes.isEmpty() && this.metrics.isEmpty() && this.datasets.isEmpty()
+        && this.createdBy.isEmpty() && this.subscribedBy.isEmpty() && this.ruleTypes.isEmpty() && this.metrics.isEmpty() && this.datasets.isEmpty()
         && active == null;
   }
 }
diff --git a/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/dashboard/resources/v2/alerts/AlertSearcher.java b/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/dashboard/resources/v2/alerts/AlertSearcher.java
index 78fe3a1..c5aec8c 100644
--- a/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/dashboard/resources/v2/alerts/AlertSearcher.java
+++ b/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/dashboard/resources/v2/alerts/AlertSearcher.java
@@ -24,6 +24,7 @@ import com.google.common.collect.ArrayListMultimap;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.Multimap;
 import java.util.ArrayList;
+import java.util.Comparator;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
@@ -116,7 +117,12 @@ public class AlertSearcher {
 
   private List<DetectionAlertConfigDTO> findRelatedSubscriptionGroups(AlertSearchQuery searchQuery) {
     AlertSearchFilter searchFilter = searchQuery.searchFilter;
+    if (searchFilter.getApplications().isEmpty() && searchFilter.getSubscriptionGroups().isEmpty()
+        && searchFilter.getSubscribedBy().isEmpty()) {
+      return this.detectionAlertConfigDAO.findAll();
+    }
     List<Predicate> predicates = new ArrayList<>();
+    Set<DetectionAlertConfigDTO> subscriptionGroups = new HashSet<>();
     if (!searchFilter.getApplications().isEmpty()) {
       predicates.add(Predicate.IN("application", searchFilter.getApplications().toArray()));
     }
@@ -124,10 +130,23 @@ public class AlertSearcher {
       predicates.add(Predicate.IN("name", searchFilter.getSubscriptionGroups().toArray()));
     }
     if (!predicates.isEmpty()) {
-      return this.detectionAlertConfigDAO.findByPredicate(Predicate.AND(predicates.toArray(new Predicate[0])));
-    } else {
-      return this.detectionAlertConfigDAO.findAll();
+      subscriptionGroups.addAll(
+          this.detectionAlertConfigDAO.findByPredicate(Predicate.AND(predicates.toArray(new Predicate[0]))));
+    }
+    if (!searchFilter.getSubscribedBy().isEmpty()) {
+      List<DetectionAlertConfigDTO> jsonValResult = this.detectionAlertConfigDAO.findByPredicateJsonVal(Predicate.OR(
+          searchFilter.getSubscribedBy()
+              .stream()
+              .map(name -> Predicate.LIKE("jsonVal", "%recipients%" + name + "%"))
+              .toArray(Predicate[]::new)));
+      if (predicates.isEmpty()) {
+        subscriptionGroups.addAll(jsonValResult);
+      } else {
+        // intersect the result from both tables
+        subscriptionGroups = jsonValResult.stream().filter(subscriptionGroups::contains).collect(Collectors.toSet());
+      }
     }
+    return new ArrayList<>(subscriptionGroups);
   }
 
   private List<DetectionConfigDTO> findDetectionConfig(AlertSearchQuery searchQuery,
@@ -141,7 +160,7 @@ public class AlertSearcher {
     // look up and run the search filters on the detection config index
     List<DetectionConfigDTO> indexedResult = new ArrayList<>();
     List<Predicate> indexPredicates = new ArrayList<>();
-    if (!searchFilter.getApplications().isEmpty() || !searchFilter.getSubscriptionGroups().isEmpty()) {
+    if (!searchFilter.getApplications().isEmpty() || !searchFilter.getSubscriptionGroups().isEmpty() || !searchFilter.getSubscribedBy().isEmpty()) {
       Set<Long> detectionConfigIds = new TreeSet<>();
       for (DetectionAlertConfigDTO subscriptionGroup : subscriptionGroups) {
         detectionConfigIds.addAll(subscriptionGroup.getVectorClocks().keySet());
@@ -208,7 +227,7 @@ public class AlertSearcher {
       jsonValResult.addAll(indexedResult);
       result = jsonValResult;
     }
-    return result;
+    return result.stream().sorted(Comparator.comparingLong(AbstractDTO::getId).reversed()).collect(Collectors.toList());
   }
 
   /**
diff --git a/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/detection/annotation/DetectionConfigurationResource.java b/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/detection/DetectionConfigurationResource.java
similarity index 58%
rename from thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/detection/annotation/DetectionConfigurationResource.java
rename to thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/detection/DetectionConfigurationResource.java
index 65befe3..8c99190 100644
--- a/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/detection/annotation/DetectionConfigurationResource.java
+++ b/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/detection/DetectionConfigurationResource.java
@@ -15,27 +15,41 @@
  * KIND, either express or implied.  See the License for the
  * specific language governing permissions and limitations
  * under the License.
+ *
  */
 
-package org.apache.pinot.thirdeye.detection.annotation;
+package org.apache.pinot.thirdeye.detection;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
-import org.apache.pinot.thirdeye.detection.annotation.registry.DetectionRegistry;
+import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiParam;
+import java.util.List;
+import java.util.stream.Collectors;
 import javax.ws.rs.GET;
 import javax.ws.rs.Path;
+import javax.ws.rs.QueryParam;
 import javax.ws.rs.core.Response;
+import org.apache.pinot.thirdeye.api.Constants;
+import org.apache.pinot.thirdeye.detection.annotation.Components;
+import org.apache.pinot.thirdeye.detection.annotation.registry.DetectionRegistry;
 
 
-@Path("/detection/annotation")
+@Path("/detection/rule")
+@Api(tags = {Constants.DETECTION_TAG})
 public class DetectionConfigurationResource {
   private static ObjectMapper OBJECT_MAPPER = new ObjectMapper();
   private static DetectionRegistry detectionRegistry = DetectionRegistry.getInstance();
 
+  private static String TUNABLE_TYPE = "TUNABLE";
+  private static String BASELINE_TYPE = "BASELINE";
+
   @GET
-  public Response getConfigurations(@ApiParam("tag") String tag) throws Exception {
-    return Response.ok(
-        OBJECT_MAPPER.writerWithDefaultPrettyPrinter().writeValueAsString(detectionRegistry.getAllAnnotation()))
-        .build();
+  public Response getRules() throws Exception {
+    List<Components> componentsList = detectionRegistry.getAllAnnotation();
+    componentsList = componentsList.stream().filter(component -> {
+      String type = component.type().toUpperCase();
+      return !type.contains(TUNABLE_TYPE) && !type.contains(BASELINE_TYPE);
+    }).collect(Collectors.toList());
+    return Response.ok(OBJECT_MAPPER.writerWithDefaultPrettyPrinter().writeValueAsString(componentsList)).build();
   }
 }
diff --git a/thirdeye/thirdeye-pinot/src/test/java/org/apache/pinot/thirdeye/dashboard/resources/v2/alerts/AlertSearcherTest.java b/thirdeye/thirdeye-pinot/src/test/java/org/apache/pinot/thirdeye/dashboard/resources/v2/alerts/AlertSearcherTest.java
index 3e25461..eee5bfa 100644
--- a/thirdeye/thirdeye-pinot/src/test/java/org/apache/pinot/thirdeye/dashboard/resources/v2/alerts/AlertSearcherTest.java
+++ b/thirdeye/thirdeye-pinot/src/test/java/org/apache/pinot/thirdeye/dashboard/resources/v2/alerts/AlertSearcherTest.java
@@ -67,7 +67,7 @@ public class AlertSearcherTest {
   @Test
   public void testSearchActive() {
     AlertSearcher searcher = new AlertSearcher();
-    Map<String, Object> result = searcher.search(new AlertSearchFilter(Collections.emptyList(), Collections.emptyList(), Collections.emptyList(), Collections.emptyList(), Collections.emptyList(), Collections.emptyList(), Collections.emptyList(), true), 10 ,0);
+    Map<String, Object> result = searcher.search(new AlertSearchFilter(Collections.emptyList(), Collections.emptyList(), Collections.emptyList(), Collections.emptyList(), Collections.emptyList(), Collections.emptyList(), Collections.emptyList(), Collections.emptyList(), true), 10 ,0);
     Assert.assertEquals(result.get("count"), 1L);
     Assert.assertEquals(result.get("limit"), 10L);
     Assert.assertEquals(result.get("offset"), 0L);


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@pinot.apache.org
For additional commands, e-mail: commits-help@pinot.apache.org