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 b132159  [TE] yaml - subscribed detection names in notification yaml 
(#3714)
b132159 is described below

commit b1321599f76b14467c0aae36d1cc027f035e924a
Author: Jihao Zhang <[email protected]>
AuthorDate: Fri Jan 18 12:02:17 2019 -0800

    [TE] yaml - subscribed detection names in notification yaml (#3714)
    
    This PR enables the ability to customize the subscribed detection pipelines 
by referring them by name in the notification yaml config.
---
 thirdeye/thirdeye-frontend/app/utils/constants.js  | 25 ++++---
 .../validators/DetectionAlertConfigValidator.java  |  5 +-
 .../yaml/YamlDetectionAlertConfigTranslator.java   | 81 +++++++++------------
 .../thirdeye/detection/yaml/YamlResource.java      | 19 ++++-
 .../YamlDetectionAlertConfigTranslatorTest.java    | 85 ++++++++--------------
 .../thirdeye/detection/yaml/YamlResourceTest.java  |  6 ++
 .../detection/yaml/alertconfig/alert-config-2.yaml |  6 +-
 .../detection/yaml/alertconfig/alert-config-3.yaml |  3 +-
 .../detection/yaml/alertconfig/alert-config-4.yaml |  3 +-
 9 files changed, 105 insertions(+), 128 deletions(-)

diff --git a/thirdeye/thirdeye-frontend/app/utils/constants.js 
b/thirdeye/thirdeye-frontend/app/utils/constants.js
index 9e96bfe..ca93679 100644
--- a/thirdeye/thirdeye-frontend/app/utils/constants.js
+++ b/thirdeye/thirdeye-frontend/app/utils/constants.js
@@ -10,7 +10,8 @@ export default {
 };
 
 
-export const yamlAlertProps = `# give a name for this detection
+export const yamlAlertProps = `# Below are all dummy example. Please update 
accordingly.
+# give a name for this detection
 detectionName: name_of_the_detection
 # the metric to detect the anomalies
 metric: metric_name
@@ -75,7 +76,8 @@ rules:
 `;
 
 export const yamIt = function(metric, dataset){
-  return `# give a name for this detection
+  return `# Below are all dummy example. Please update accordingly.
+# give a name for this detection
 detectionName: name_of_the_detection
 # the metric to detect the anomalies
 metric: ${metric}
@@ -142,22 +144,21 @@ rules:
 
 export const yamlAlertSettings = `# Below are all dummy example. Please update 
accordingly.
 subscriptionGroupName: test_subscription_group
-cron: "0 0/5 * 1/1 * ? *"
-application: "parity-check"
-active: true
-
-detectionConfigIds:
- - 5773069
+application: your_application_name
+subscribedDetections: 
+  - your_detection_name
 
-fromAddress: [email protected]
+alertSchemes:
+- type: EMAIL
 recipients:
  to:
   - "[email protected]"
  cc:
   - "[email protected]"
+fromAddress: [email protected]
 
-alertSchemes:
-- type: EMAIL
-
+cron: "0 0/5 * 1/1 * ? *"
+type: DEFAULT_ALERTER_PIPELINE
+active: true
 referenceLinks:
  "My Company FAQs": "http://www.company.com/faq"`;
diff --git 
a/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/detection/validators/DetectionAlertConfigValidator.java
 
b/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/detection/validators/DetectionAlertConfigValidator.java
index e432a51..29fcab4 100644
--- 
a/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/detection/validators/DetectionAlertConfigValidator.java
+++ 
b/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/detection/validators/DetectionAlertConfigValidator.java
@@ -31,7 +31,7 @@ public class DetectionAlertConfigValidator extends 
ConfigValidator {
 
   private static final DetectionAlertConfigValidator INSTANCE = new 
DetectionAlertConfigValidator();
   private static final String PROP_CLASS_NAME = "className";
-
+  
   public static DetectionAlertConfigValidator getInstance() {
     return INSTANCE;
   }
@@ -61,7 +61,6 @@ public class DetectionAlertConfigValidator extends 
ConfigValidator {
       responseMessage.put("message", "'Type' field cannot be left empty.");
       return false;
     }
-
     // At least one alertScheme is required
     if (alertConfig.getAlertSchemes() == null || 
alertConfig.getAlertSchemes().size() == 0) {
       responseMessage.put("message", "Alert scheme cannot be left empty");
@@ -70,7 +69,7 @@ public class DetectionAlertConfigValidator extends 
ConfigValidator {
     // Properties cannot be empty
     if (alertConfig.getProperties() == null || 
alertConfig.getProperties().isEmpty()) {
       responseMessage.put("message", "Alert properties cannot be left empty. 
Please specify the recipients,"
-          + " detection ids, and type.");
+          + " subscribed detections, and type.");
       return false;
     }
     // detectionConfigIds cannot be empty
diff --git 
a/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/detection/yaml/YamlDetectionAlertConfigTranslator.java
 
b/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/detection/yaml/YamlDetectionAlertConfigTranslator.java
index 06b02c1..e245b59 100644
--- 
a/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/detection/yaml/YamlDetectionAlertConfigTranslator.java
+++ 
b/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/detection/yaml/YamlDetectionAlertConfigTranslator.java
@@ -21,8 +21,14 @@ package org.apache.pinot.thirdeye.detection.yaml;
 
 import com.google.common.base.CaseFormat;
 import com.google.common.base.Preconditions;
+import java.util.stream.Collectors;
+import org.apache.pinot.thirdeye.datalayer.bao.DetectionAlertConfigManager;
+import org.apache.pinot.thirdeye.datalayer.bao.DetectionConfigManager;
 import org.apache.pinot.thirdeye.datalayer.dto.DetectionAlertConfigDTO;
+import org.apache.pinot.thirdeye.datalayer.dto.DetectionConfigDTO;
 import org.apache.pinot.thirdeye.datalayer.pojo.AlertConfigBean;
+import org.apache.pinot.thirdeye.datalayer.util.Predicate;
+import org.apache.pinot.thirdeye.datasource.DAORegistry;
 import org.apache.pinot.thirdeye.detection.ConfigUtils;
 import 
org.apache.pinot.thirdeye.detection.annotation.registry.DetectionAlertRegistry;
 import 
org.apache.pinot.thirdeye.detection.annotation.registry.DetectionRegistry;
@@ -49,59 +55,29 @@ public class YamlDetectionAlertConfigTranslator {
   public static final String PROP_ACTIVE = "active";
   public static final String PROP_APPLICATION = "application";
   public static final String PROP_FROM = "fromAddress";
-  public static final String PROP_ONLY_FETCH_LEGACY_ANOMALIES = 
"onlyFetchLegacyAnomalies";
   public static final String PROP_EMAIL_SUBJECT_TYPE = "emailSubjectStyle";
   public static final String PROP_ALERT_SCHEMES = "alertSchemes";
-  public static final String PROP_ALERT_SUPPRESSORS = "alertSuppressors";
-  public static final String PROP_REFERENCE_LINKS = "referenceLinks";
 
   public static final String PROP_TYPE = "type";
   public static final String PROP_CLASS_NAME = "className";
-  public static final String PROP_PARAM = "params";
+  static final String PROP_PARAM = "params";
+  static final String PROP_ALERT_SUPPRESSORS = "alertSuppressors";
+  static final String PROP_REFERENCE_LINKS = "referenceLinks";
+  static final String PROP_ONLY_FETCH_LEGACY_ANOMALIES = 
"onlyFetchLegacyAnomalies";
+  static final String PROP_DETECTION_NAMES = "subscribedDetections";
 
-  public static final String PROP_DIMENSION = "dimension";
-  public static final String PROP_DIMENSION_RECIPIENTS = "dimensionRecipients";
-  public static final String PROP_TIME_WINDOWS = "timeWindows";
-  public static final String CRON_SCHEDULE_DEFAULT = "0 0/5 * * * ? *"; // 
Every 5 min
+  static final String PROP_DIMENSION = "dimension";
+  static final String PROP_DIMENSION_RECIPIENTS = "dimensionRecipients";
+  static final String PROP_TIME_WINDOWS = "timeWindows";
+  static final String CRON_SCHEDULE_DEFAULT = "0 0/5 * * * ? *"; // Every 5 min
 
   private static final DetectionAlertRegistry DETECTION_ALERT_REGISTRY = 
DetectionAlertRegistry.getInstance();
   private static final Set<String> PROPERTY_KEYS = new HashSet<>(
-      Arrays.asList(PROP_DETECTION_CONFIG_IDS, PROP_RECIPIENTS, 
PROP_DIMENSION, PROP_DIMENSION_RECIPIENTS));
+      Arrays.asList(PROP_RECIPIENTS, PROP_DIMENSION, 
PROP_DIMENSION_RECIPIENTS));
+  private final DetectionConfigManager detectionConfigDAO;
 
-  private static final YamlDetectionAlertConfigTranslator INSTANCE = new 
YamlDetectionAlertConfigTranslator();
-
-  public static YamlDetectionAlertConfigTranslator getInstance() {
-    return INSTANCE;
-  }
-
-  /**
-   * generate detection alerter from YAML
-   * @param alertYamlConfigs yaml configuration of the alerter
-   * @param detectionConfigIds detection config ids that should be included in 
the detection alerter
-   * @param existingVectorClocks vector clocks that should be kept in the new 
alerter
-   * @return a detection alert config
-   */
-  public DetectionAlertConfigDTO generateDetectionAlertConfig(Map<String, 
Object> alertYamlConfigs,
-      Collection<Long> detectionConfigIds, Map<Long, Long> 
existingVectorClocks) {
-    DetectionAlertConfigDTO alertConfigDTO = new DetectionAlertConfigDTO();
-    
Preconditions.checkArgument(alertYamlConfigs.containsKey(PROP_SUBS_GROUP_NAME), 
"Alert property missing: " + PROP_SUBS_GROUP_NAME);
-
-    if (existingVectorClocks == null) {
-      existingVectorClocks = new HashMap<>();
-    }
-    for (long detectionConfigId : detectionConfigIds) {
-      if (!existingVectorClocks.containsKey(detectionConfigId)){
-        existingVectorClocks.put(detectionConfigId, 0L);
-      }
-    }
-    alertConfigDTO.setVectorClocks(existingVectorClocks);
-
-    alertConfigDTO.setName(MapUtils.getString(alertYamlConfigs, 
PROP_SUBS_GROUP_NAME));
-    alertConfigDTO.setCronExpression(MapUtils.getString(alertYamlConfigs, 
PROP_CRON, CRON_SCHEDULE_DEFAULT));
-    alertConfigDTO.setActive(true);
-    alertConfigDTO.setApplication(MapUtils.getString(alertYamlConfigs, 
PROP_APPLICATION));
-    alertConfigDTO.setProperties(buildAlerterProperties(alertYamlConfigs, 
detectionConfigIds));
-    return alertConfigDTO;
+  public YamlDetectionAlertConfigTranslator(DetectionConfigManager 
detectionConfigDAO) {
+    this.detectionConfigDAO = detectionConfigDAO;
   }
 
   private Map<String, Object> buildAlerterProperties(Map<String, Object> 
alertYamlConfigs, Collection<Long> detectionConfigIds) {
@@ -209,15 +185,24 @@ public class YamlDetectionAlertConfigTranslator {
 
     alertConfigDTO.setAlertSchemes(buildAlertSchemes(yamlAlertConfig));
     alertConfigDTO.setAlertSuppressors(buildAlertSuppressors(yamlAlertConfig));
-    alertConfigDTO.setProperties(buildAlerterProperties(yamlAlertConfig));
+    alertConfigDTO.setHighWaterMark(0L);
 
     // NOTE: The below fields will/should be hidden from the YAML/UI. They 
will only be updated by the backend pipeline.
-    List<Integer> detectionConfigIds = 
ConfigUtils.getList(yamlAlertConfig.get(PROP_DETECTION_CONFIG_IDS));
+    List<Long> detectionConfigIds = new ArrayList<>();
+    List<String> detectionNames = 
ConfigUtils.getList(yamlAlertConfig.get(PROP_DETECTION_NAMES));
+
+    try {
+      detectionConfigIds.addAll(detectionNames.stream().map(detectionName ->  
this.detectionConfigDAO.findByPredicate(
+          Predicate.EQ("name", 
detectionName)).get(0).getId()).collect(Collectors.toList()));
+    } catch (Exception e){
+      throw new IllegalArgumentException("cannot find detection pipeline, 
please check the subscribed detections.");
+    }
+
+    alertConfigDTO.setProperties(buildAlerterProperties(yamlAlertConfig, 
detectionConfigIds));
     Map<Long, Long> vectorClocks = new HashMap<>();
-    for (int detectionConfigId : detectionConfigIds) {
-      vectorClocks.put((long) detectionConfigId, 0L);
+    for (long detectionConfigId : detectionConfigIds) {
+      vectorClocks.put(detectionConfigId, 0L);
     }
-    alertConfigDTO.setHighWaterMark(0L);
     alertConfigDTO.setVectorClocks(vectorClocks);
 
     return alertConfigDTO;
diff --git 
a/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/detection/yaml/YamlResource.java
 
b/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/detection/yaml/YamlResource.java
index c0ec523..105ec79 100644
--- 
a/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/detection/yaml/YamlResource.java
+++ 
b/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/detection/yaml/YamlResource.java
@@ -98,7 +98,7 @@ public class YamlResource {
     this.detectionAlertConfigDAO = 
DAORegistry.getInstance().getDetectionAlertConfigManager();
     this.translatorLoader = new YamlDetectionTranslatorLoader();
     this.alertValidator = DetectionAlertConfigValidator.getInstance();
-    this.alertConfigTranslator = 
YamlDetectionAlertConfigTranslator.getInstance();
+    this.alertConfigTranslator = new 
YamlDetectionAlertConfigTranslator(this.detectionConfigDAO);
     this.metricDAO = DAORegistry.getInstance().getMetricConfigDAO();
     this.datasetDAO = DAORegistry.getInstance().getDatasetConfigDAO();
     this.eventDAO = DAORegistry.getInstance().getEventDAO();
@@ -370,7 +370,13 @@ public class YamlResource {
     }
 
     // Translate config from YAML to detection alert config (JSON)
-    DetectionAlertConfigDTO alertConfig = 
this.alertConfigTranslator.translate(newAlertConfigMap);
+    DetectionAlertConfigDTO alertConfig;
+    try {
+      alertConfig = this.alertConfigTranslator.translate(newAlertConfigMap);
+    } catch (Exception e){
+      responseMessage.put("message", e.getMessage());
+      return null;
+    }
     alertConfig.setYaml(yamlAlertConfig);
 
     // Validate the config before saving it
@@ -434,7 +440,14 @@ public class YamlResource {
       responseMessage.put("message", "Subscription group name field cannot be 
left empty.");
       return null;
     }
-    DetectionAlertConfigDTO newAlertConfig = 
this.alertConfigTranslator.translate(newAlertConfigMap);
+
+    DetectionAlertConfigDTO newAlertConfig;
+    try {
+      newAlertConfig = this.alertConfigTranslator.translate(newAlertConfigMap);
+    } catch (Exception e){
+      responseMessage.put("message", e.getMessage());
+      return null;
+    }
 
     // Translate config from YAML to detection alert config (JSON)
     DetectionAlertConfigDTO updatedAlertConfig = 
updateDetectionAlertConfig(oldAlertConfig, newAlertConfig);
diff --git 
a/thirdeye/thirdeye-pinot/src/test/java/org/apache/pinot/thirdeye/detection/yaml/YamlDetectionAlertConfigTranslatorTest.java
 
b/thirdeye/thirdeye-pinot/src/test/java/org/apache/pinot/thirdeye/detection/yaml/YamlDetectionAlertConfigTranslatorTest.java
index 8aec341..08f089d 100644
--- 
a/thirdeye/thirdeye-pinot/src/test/java/org/apache/pinot/thirdeye/detection/yaml/YamlDetectionAlertConfigTranslatorTest.java
+++ 
b/thirdeye/thirdeye-pinot/src/test/java/org/apache/pinot/thirdeye/detection/yaml/YamlDetectionAlertConfigTranslatorTest.java
@@ -1,18 +1,20 @@
 package org.apache.pinot.thirdeye.detection.yaml;
 
-import org.apache.pinot.thirdeye.datalayer.dto.DetectionAlertConfigDTO;
-import org.apache.pinot.thirdeye.datalayer.pojo.AlertConfigBean;
-import 
org.apache.pinot.thirdeye.detection.annotation.registry.DetectionAlertRegistry;
-import 
org.apache.pinot.thirdeye.detection.annotation.registry.DetectionRegistry;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashMap;
-import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
-import java.util.Set;
+import org.apache.pinot.thirdeye.datalayer.bao.DAOTestBase;
+import org.apache.pinot.thirdeye.datalayer.bao.DetectionConfigManager;
+import org.apache.pinot.thirdeye.datalayer.dto.DetectionAlertConfigDTO;
+import org.apache.pinot.thirdeye.datalayer.dto.DetectionConfigDTO;
+import org.apache.pinot.thirdeye.datalayer.pojo.AlertConfigBean;
+import org.apache.pinot.thirdeye.datasource.DAORegistry;
+import org.apache.pinot.thirdeye.detection.ConfigUtils;
+import 
org.apache.pinot.thirdeye.detection.annotation.registry.DetectionAlertRegistry;
 import org.testng.Assert;
+import org.testng.annotations.AfterMethod;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
@@ -20,41 +22,9 @@ import static 
org.apache.pinot.thirdeye.detection.yaml.YamlDetectionAlertConfigT
 
 
 public class YamlDetectionAlertConfigTranslatorTest {
-  private Map<String, Object> alertYamlConfigs;
-  private YamlDetectionAlertConfigTranslator translator;
 
-  @Test
-  public void testGenerateDetectionAlertConfig() {
-    List<Long> ids = Collections.singletonList(1234567L);
-    DetectionAlertConfigDTO
-        alertConfigDTO = 
this.translator.generateDetectionAlertConfig(this.alertYamlConfigs, ids, null);
-    Assert.assertEquals(alertConfigDTO.getName(), 
alertYamlConfigs.get(PROP_SUBS_GROUP_NAME));
-    Assert.assertEquals(alertConfigDTO.getApplication(), 
alertYamlConfigs.get("application"));
-    Assert.assertEquals(alertConfigDTO.getVectorClocks().get(ids.get(0)), new 
Long(0L));
-    Assert.assertEquals(alertConfigDTO.getCronExpression(), 
CRON_SCHEDULE_DEFAULT);
-    Map<String, Object> properties = alertConfigDTO.getProperties();
-    Assert.assertEquals(properties.get(PROP_DETECTION_CONFIG_IDS), ids);
-    Assert.assertEquals(properties.get("to"), alertYamlConfigs.get("to"));
-  }
-
-  @Test
-  public void testGenerateDetectionAlertConfigWithExistingVectorClocks() {
-    List<Long> ids = Arrays.asList(1234567L, 7654321L);
-    Map<Long, Long> vectorClocks = new HashMap<>();
-    vectorClocks.put(ids.get(0), 1536173395000L);
-    vectorClocks.put(7654321L, 1536173395000L);
-    DetectionAlertConfigDTO
-        alertConfigDTO = 
this.translator.generateDetectionAlertConfig(this.alertYamlConfigs, ids, 
vectorClocks);
-    Assert.assertEquals(alertConfigDTO.getName(), 
alertYamlConfigs.get(PROP_SUBS_GROUP_NAME));
-    Assert.assertEquals(alertConfigDTO.getApplication(), 
alertYamlConfigs.get("application"));
-    Assert.assertEquals(alertConfigDTO.getVectorClocks().get(ids.get(0)), 
vectorClocks.get(ids.get(0)));
-    Assert.assertEquals(alertConfigDTO.getVectorClocks().get(7654321L), 
vectorClocks.get(7654321L));
-    Assert.assertEquals(alertConfigDTO.getCronExpression(), 
CRON_SCHEDULE_DEFAULT);
-
-    Map<String, Object> properties = alertConfigDTO.getProperties();
-    Assert.assertEquals(properties.get("detectionConfigIds"), ids);
-    Assert.assertEquals(properties.get("to"), alertYamlConfigs.get("to"));
-  }
+  private DAOTestBase testDAOProvider;
+  private DetectionConfigManager detectionConfigManager;
 
   @Test
   public void testTranslateAlert() {
@@ -67,14 +37,13 @@ public class YamlDetectionAlertConfigTranslatorTest {
     alertYamlConfigs.put(PROP_FROM, "thirdeye@thirdeye");
     alertYamlConfigs.put(PROP_CRON, CRON_SCHEDULE_DEFAULT);
     alertYamlConfigs.put(PROP_ACTIVE, true);
+    alertYamlConfigs.put(PROP_DETECTION_NAMES, 
Collections.singletonList("test_pipeline_1"));
+
 
     Map<String, String> refLinks = new HashMap<>();
     refLinks.put("Test Link", "test_url");
     alertYamlConfigs.put(PROP_REFERENCE_LINKS, refLinks);
 
-    Set<Integer> detectionIds = new HashSet<>(Arrays.asList(1234, 6789));
-    alertYamlConfigs.put(PROP_DETECTION_CONFIG_IDS, detectionIds);
-
     Map<String, Object> alertSchemes = new HashMap<>();
     alertSchemes.put(PROP_TYPE, "EMAIL");
     List<Map<String, Object>> alertSchemesHolder = new ArrayList<>();
@@ -96,7 +65,7 @@ public class YamlDetectionAlertConfigTranslatorTest {
     recipients.put("cc", new 
ArrayList<>(Collections.singleton("[email protected]")));
     alertYamlConfigs.put(PROP_RECIPIENTS, recipients);
 
-    DetectionAlertConfigDTO alertConfig = 
YamlDetectionAlertConfigTranslator.getInstance().translate(alertYamlConfigs);
+    DetectionAlertConfigDTO alertConfig = new 
YamlDetectionAlertConfigTranslator(this.detectionConfigManager).translate(alertYamlConfigs);
 
     Assert.assertTrue(alertConfig.isActive());
     Assert.assertFalse(alertConfig.isOnlyFetchLegacyAnomalies());
@@ -120,26 +89,30 @@ public class YamlDetectionAlertConfigTranslatorTest {
     Assert.assertEquals(timeWindow.get("windowEndTime"), 1543215600000L);
 
     Assert.assertNotNull(alertConfig.getProperties());
-    Assert.assertEquals(((Set<Long>) 
alertConfig.getProperties().get(PROP_DETECTION_CONFIG_IDS)).size(), 2);
+    
Assert.assertEquals(ConfigUtils.getLongs(alertConfig.getProperties().get(PROP_DETECTION_CONFIG_IDS)).size(),
 1);
 
     Map<String, Object> recipient = (Map<String, Object>) 
alertConfig.getProperties().get(PROP_RECIPIENTS);
     Assert.assertEquals(recipient.size(), 2);
     Assert.assertEquals(((List<String>) recipient.get("to")).get(0), 
"[email protected]");
     Assert.assertEquals(((List<String>) recipient.get("cc")).get(0), 
"[email protected]");
 
-    Assert.assertEquals(((Set<Long>) 
alertConfig.getProperties().get(PROP_DETECTION_CONFIG_IDS)).size(), 2);
   }
 
-  @BeforeMethod
+  @BeforeMethod(alwaysRun = true)
   public void setUp() {
+    testDAOProvider = DAOTestBase.getInstance();
+    DAORegistry daoRegistry = DAORegistry.getInstance();
+    detectionConfigManager = daoRegistry.getDetectionConfigManager();
+    DetectionConfigDTO detectionConfigDTO = new DetectionConfigDTO();
+    detectionConfigDTO.setName("test_pipeline_1");
+    detectionConfigManager.save(detectionConfigDTO);
+
     
DetectionAlertRegistry.getInstance().registerAlertFilter("DEFAULT_ALERTER_PIPELINE",
 "RECIPIENTClass");
-    this.alertYamlConfigs = new HashMap<>();
-    alertYamlConfigs.put(PROP_SUBS_GROUP_NAME, "test_alert");
-    alertYamlConfigs.put("type", "DEFAULT_ALerTeR_PipeLIne");
-    Map<String, Object> recipients = new HashMap<>();
-    recipients.put("to", Arrays.asList("test1", "test2"));
-    alertYamlConfigs.put("recipients", recipients);
-    alertYamlConfigs.put("application", "TestApplication");
-    this.translator = new YamlDetectionAlertConfigTranslator();
   }
+
+  @AfterMethod(alwaysRun = true)
+  void afterMethod() {
+    testDAOProvider.cleanup();
+  }
+
 }
diff --git 
a/thirdeye/thirdeye-pinot/src/test/java/org/apache/pinot/thirdeye/detection/yaml/YamlResourceTest.java
 
b/thirdeye/thirdeye-pinot/src/test/java/org/apache/pinot/thirdeye/detection/yaml/YamlResourceTest.java
index 946af6a..b09b548 100644
--- 
a/thirdeye/thirdeye-pinot/src/test/java/org/apache/pinot/thirdeye/detection/yaml/YamlResourceTest.java
+++ 
b/thirdeye/thirdeye-pinot/src/test/java/org/apache/pinot/thirdeye/detection/yaml/YamlResourceTest.java
@@ -1,8 +1,10 @@
 package org.apache.pinot.thirdeye.detection.yaml;
 
 import org.apache.pinot.thirdeye.datalayer.bao.DAOTestBase;
+import org.apache.pinot.thirdeye.datalayer.bao.DetectionConfigManager;
 import org.apache.pinot.thirdeye.datalayer.dto.ApplicationDTO;
 import org.apache.pinot.thirdeye.datalayer.dto.DetectionAlertConfigDTO;
+import org.apache.pinot.thirdeye.datalayer.dto.DetectionConfigDTO;
 import org.apache.pinot.thirdeye.datasource.DAORegistry;
 import 
org.apache.pinot.thirdeye.detection.annotation.registry.DetectionAlertRegistry;
 import 
org.apache.pinot.thirdeye.detection.annotation.registry.DetectionRegistry;
@@ -27,6 +29,10 @@ public class YamlResourceTest {
     testDAOProvider = DAOTestBase.getInstance();
     this.yamlResource = new YamlResource();
     this.daoRegistry = DAORegistry.getInstance();
+    DetectionConfigManager detectionDAO = 
this.daoRegistry.getDetectionConfigManager();
+    DetectionConfigDTO config = new DetectionConfigDTO();
+    config.setName("test_detection_1");
+    detectionDAO.save(config);
 
     DetectionAlertRegistry.getInstance().registerAlertScheme("EMAIL", 
"EmailClass");
     DetectionAlertRegistry.getInstance().registerAlertScheme("IRIS", 
"IrisClass");
diff --git 
a/thirdeye/thirdeye-pinot/src/test/resources/org/apache/pinot/thirdeye/detection/yaml/alertconfig/alert-config-2.yaml
 
b/thirdeye/thirdeye-pinot/src/test/resources/org/apache/pinot/thirdeye/detection/yaml/alertconfig/alert-config-2.yaml
index 9bf1cc1..45ce880 100644
--- 
a/thirdeye/thirdeye-pinot/src/test/resources/org/apache/pinot/thirdeye/detection/yaml/alertconfig/alert-config-2.yaml
+++ 
b/thirdeye/thirdeye-pinot/src/test/resources/org/apache/pinot/thirdeye/detection/yaml/alertconfig/alert-config-2.yaml
@@ -2,8 +2,8 @@ subscriptionGroupName: "Subscription Group Name"
 cron: "0 0/5 * 1/1 * ? *"
 application: "test_application"
 active: true
-fromAddress: [email protected]
-
+subscribedDetections:
+  - test_detection_1
 type: DIMENSIONAL_ALERTER_PIPELINE
 dimensionRecipients:
  "android":
@@ -12,8 +12,6 @@ dimensionRecipients:
   - "[email protected]"
 dimension: app_name
 
-detectionConfigIds:
- - 5773069
 
 fromAddress: [email protected]
 
diff --git 
a/thirdeye/thirdeye-pinot/src/test/resources/org/apache/pinot/thirdeye/detection/yaml/alertconfig/alert-config-3.yaml
 
b/thirdeye/thirdeye-pinot/src/test/resources/org/apache/pinot/thirdeye/detection/yaml/alertconfig/alert-config-3.yaml
index 2325502..63745eb 100644
--- 
a/thirdeye/thirdeye-pinot/src/test/resources/org/apache/pinot/thirdeye/detection/yaml/alertconfig/alert-config-3.yaml
+++ 
b/thirdeye/thirdeye-pinot/src/test/resources/org/apache/pinot/thirdeye/detection/yaml/alertconfig/alert-config-3.yaml
@@ -2,7 +2,8 @@ subscriptionGroupName: "test_group"
 cron: "0 0/5 * 1/1 * ? *"
 application: "test_application"
 active: true
-fromAddress: [email protected]
+subscribedDetections:
+  - test_detection_1
 
 type: DIMENSIONAL_ALERTER_PIPELINE
 dimensionRecipients:
diff --git 
a/thirdeye/thirdeye-pinot/src/test/resources/org/apache/pinot/thirdeye/detection/yaml/alertconfig/alert-config-4.yaml
 
b/thirdeye/thirdeye-pinot/src/test/resources/org/apache/pinot/thirdeye/detection/yaml/alertconfig/alert-config-4.yaml
index 9bf1cc1..990d68b 100644
--- 
a/thirdeye/thirdeye-pinot/src/test/resources/org/apache/pinot/thirdeye/detection/yaml/alertconfig/alert-config-4.yaml
+++ 
b/thirdeye/thirdeye-pinot/src/test/resources/org/apache/pinot/thirdeye/detection/yaml/alertconfig/alert-config-4.yaml
@@ -2,7 +2,8 @@ subscriptionGroupName: "Subscription Group Name"
 cron: "0 0/5 * 1/1 * ? *"
 application: "test_application"
 active: true
-fromAddress: [email protected]
+subscribedDetections:
+  - test_detection_1
 
 type: DIMENSIONAL_ALERTER_PIPELINE
 dimensionRecipients:


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to