This is an automated email from the ASF dual-hosted git repository.
apucher 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 213ff9c [TE] Configure Filters per Alert in Legacy Alerter (#3572)
213ff9c is described below
commit 213ff9cf0bd5f251652b1afb4dfba7993ab3c4f4
Author: Akshay Rai <[email protected]>
AuthorDate: Fri Nov 30 15:54:04 2018 -0800
[TE] Configure Filters per Alert in Legacy Alerter (#3572)
---
.../detection/alert/filter/LegacyAlertFilter.java | 37 +++++++++++++++-------
.../detector/email/filter/BaseAlertFilter.java | 2 +-
2 files changed, 26 insertions(+), 13 deletions(-)
diff --git
a/thirdeye/thirdeye-pinot/src/main/java/com/linkedin/thirdeye/detection/alert/filter/LegacyAlertFilter.java
b/thirdeye/thirdeye-pinot/src/main/java/com/linkedin/thirdeye/detection/alert/filter/LegacyAlertFilter.java
index f08ddbc..56a671f 100644
---
a/thirdeye/thirdeye-pinot/src/main/java/com/linkedin/thirdeye/detection/alert/filter/LegacyAlertFilter.java
+++
b/thirdeye/thirdeye-pinot/src/main/java/com/linkedin/thirdeye/detection/alert/filter/LegacyAlertFilter.java
@@ -16,10 +16,8 @@
package com.linkedin.thirdeye.detection.alert.filter;
-import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.common.base.Predicate;
import com.google.common.collect.Collections2;
-import com.linkedin.thirdeye.datalayer.dto.AlertConfigDTO;
import com.linkedin.thirdeye.datalayer.dto.DetectionAlertConfigDTO;
import com.linkedin.thirdeye.datalayer.dto.MergedAnomalyResultDTO;
import com.linkedin.thirdeye.detection.alert.DetectionAlertFilterRecipients;
@@ -38,10 +36,14 @@ import java.util.Map;
import java.util.Set;
import javax.annotation.Nullable;
import org.apache.commons.collections.MapUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
public class LegacyAlertFilter extends DetectionAlertFilter {
- private static final String PROP_LEGACY_ALERT_FILTER_CONFIG =
"legacyAlertFilterConfig";
+ private final static Logger LOG =
LoggerFactory.getLogger(LegacyAlertFilter.class);
+
+ private static final String PROP_LEGACY_ALERT_FILTER_CONFIGS =
"legacyAlertFilterConfigs";
private static final String PROP_LEGACY_ALERT_FILTER_CLASS_NAME =
"legacyAlertFilterClassName";
private static final String PROP_DETECTION_CONFIG_IDS = "detectionConfigIds";
private static final String PROP_RECIPIENTS = "recipients";
@@ -49,25 +51,18 @@ public class LegacyAlertFilter extends DetectionAlertFilter
{
private static final String PROP_CC = "cc";
private static final String PROP_BCC = "bcc";
- private BaseAlertFilter alertFilter;
private final List<Long> detectionConfigIds;
private final Map<Long, Long> vectorClocks;
public LegacyAlertFilter(DataProvider provider, DetectionAlertConfigDTO
config, long endTime) throws Exception {
super(provider, config, endTime);
- alertFilter = new DummyAlertFilter();
- if
(config.getProperties().containsKey(PROP_LEGACY_ALERT_FILTER_CLASS_NAME)) {
- String className = MapUtils.getString(config.getProperties(),
PROP_LEGACY_ALERT_FILTER_CLASS_NAME);
- alertFilter = (BaseAlertFilter) Class.forName(className).newInstance();
- alertFilter.setParameters(MapUtils.getMap(config.getProperties(),
PROP_LEGACY_ALERT_FILTER_CONFIG));
- }
this.detectionConfigIds =
ConfigUtils.getLongs(this.config.getProperties().get(PROP_DETECTION_CONFIG_IDS));
this.vectorClocks = this.config.getVectorClocks();
}
@Override
- public DetectionAlertFilterResult run() {
+ public DetectionAlertFilterResult run() throws Exception {
DetectionAlertFilterResult result = new DetectionAlertFilterResult();
Map<String, Set<String>> recipientsMap =
ConfigUtils.getMap(this.config.getProperties().get(PROP_RECIPIENTS));
@@ -76,6 +71,11 @@ public class LegacyAlertFilter extends DetectionAlertFilter {
Set<String> bcc = (recipientsMap.get(PROP_BCC) == null) ?
Collections.emptySet() : new HashSet<>(recipientsMap.get(PROP_BCC));
DetectionAlertFilterRecipients recipients = new
DetectionAlertFilterRecipients(to, cc, bcc);
+ Map<String, Object> alertFilterConfig =
MapUtils.getMap(config.getProperties(), PROP_LEGACY_ALERT_FILTER_CONFIGS);
+ if (alertFilterConfig == null) {
+ LOG.info("alertFilterConfig cannot be found in notification group {}",
this.config.getId());
+ }
+
for (Long functionId : this.detectionConfigIds) {
long startTime = MapUtils.getLong(this.vectorClocks, functionId, 0L);
@@ -90,11 +90,24 @@ public class LegacyAlertFilter extends DetectionAlertFilter
{
candidates =
this.provider.fetchAnomalies(Collections.singletonList(slice),
functionId).get(slice);
}
+ BaseAlertFilter alertFilter = new DummyAlertFilter();
+ if
(config.getProperties().containsKey(PROP_LEGACY_ALERT_FILTER_CLASS_NAME)) {
+ String className = MapUtils.getString(config.getProperties(),
PROP_LEGACY_ALERT_FILTER_CLASS_NAME);
+ alertFilter = (BaseAlertFilter) Class.forName(className).newInstance();
+ Map<String, String> params = MapUtils.getMap(alertFilterConfig,
functionId);
+ if (params == null) {
+ LOG.info("AlertFilter cannot be found for function {} in
notification group {}", functionId, this.config.getId());
+ }
+
+ alertFilter.setParameters(params);
+ }
+
+ BaseAlertFilter finalAlertFilter = alertFilter;
Collection<MergedAnomalyResultDTO> anomalies =
Collections2.filter(candidates, new
Predicate<MergedAnomalyResultDTO>() {
@Override
public boolean apply(@Nullable MergedAnomalyResultDTO
mergedAnomaly) {
- return mergedAnomaly != null && !mergedAnomaly.isChild() &&
alertFilter.isQualified(mergedAnomaly);
+ return mergedAnomaly != null && !mergedAnomaly.isChild() &&
finalAlertFilter.isQualified(mergedAnomaly);
}
});
diff --git
a/thirdeye/thirdeye-pinot/src/main/java/com/linkedin/thirdeye/detector/email/filter/BaseAlertFilter.java
b/thirdeye/thirdeye-pinot/src/main/java/com/linkedin/thirdeye/detector/email/filter/BaseAlertFilter.java
index d189679..1482b33 100644
---
a/thirdeye/thirdeye-pinot/src/main/java/com/linkedin/thirdeye/detector/email/filter/BaseAlertFilter.java
+++
b/thirdeye/thirdeye-pinot/src/main/java/com/linkedin/thirdeye/detector/email/filter/BaseAlertFilter.java
@@ -46,7 +46,7 @@ public abstract class BaseAlertFilter implements AlertFilter {
Double value = null;
String fieldVal = null;
// Get user's value for the specified field
- if (parameterSetting.containsKey(fieldName)) {
+ if (parameterSetting != null && parameterSetting.containsKey(fieldName))
{
fieldVal = parameterSetting.get(fieldName);
if (NumberUtils.isNumber(fieldVal)) {
value = Double.parseDouble(parameterSetting.get(fieldName));
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]