package com.linkedin.thirdeye.anomaly.alert.grouping.filter;
import java.util.Collections;
import java.util.Map;
import org.apache.commons.collections.MapUtils;
import org.apache.commons.lang3.StringUtils;
public class AlertGroupFilterFactory {
public static final String GROUP_FILTER_TYPE_KEY = "type";
private static final AlertGroupFilter DUMMY_ALERT_GROUP_FILTER = new DummyAlertGroupFilter();
public enum GroupFilterType {
DUMMY, SIZE_SEVERITY
}
public static AlertGroupFilter fromSpec(Map<String, String> spec) {
if (MapUtils.isEmpty(spec)) {
spec = Collections.emptyMap();
}
AlertGroupFilter alertGroupFilter = fromStringType(spec.get(GROUP_FILTER_TYPE_KEY));
alertGroupFilter.setParameters(spec);
return alertGroupFilter;
}
private static AlertGroupFilter fromStringType(String type) {
if (StringUtils.isBlank(type)) { // backward compatibility
return DUMMY_ALERT_GROUP_FILTER;
}
GroupFilterType filterType = GroupFilterType.DUMMY;
for (GroupFilterType enumFilterType : GroupFilterType.values()) {
if (enumFilterType.name().compareToIgnoreCase(type) == 0) {
filterType = enumFilterType;
break;
}
}
switch (filterType) {
case DUMMY: // speed optimization for most use cases
return DUMMY_ALERT_GROUP_FILTER;
case SIZE_SEVERITY:
return new SizeSeverityAlertGroupFilter();
default:
return DUMMY_ALERT_GROUP_FILTER;
}
}
}