apucher closed pull request #3544: [TE] Display Holidays only from Top Countries
URL: https://github.com/apache/incubator-pinot/pull/3544
This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:
As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):
diff --git
a/thirdeye/thirdeye-pinot/src/main/java/com/linkedin/thirdeye/alert/content/BaseEmailContentFormatter.java
b/thirdeye/thirdeye-pinot/src/main/java/com/linkedin/thirdeye/alert/content/BaseEmailContentFormatter.java
index d0c76571b7..9f62687011 100644
---
a/thirdeye/thirdeye-pinot/src/main/java/com/linkedin/thirdeye/alert/content/BaseEmailContentFormatter.java
+++
b/thirdeye/thirdeye-pinot/src/main/java/com/linkedin/thirdeye/alert/content/BaseEmailContentFormatter.java
@@ -450,7 +450,7 @@ public static String getFeedbackValue(AnomalyFeedback
feedback) {
, String metricName, String serviceName, Map<String, List<String>>
targetDimensions) {
List<EventDTO> relatedEvents = new ArrayList<>();
for (EventType eventType : eventTypes) {
- relatedEvents.addAll(getRelatedEvents(eventType, start, end, metricName,
serviceName, targetDimensions));
+ relatedEvents.addAll(getHolidayEvents(start, end, targetDimensions));
}
return relatedEvents;
}
@@ -509,27 +509,19 @@ public static Period getBaselinePeriod(COMPARE_MODE
compareMode) {
/**
* Taking advantage of event data provider, extract the events around the
given start and end time
- * @param eventType a given event type
* @param start the start time of the event, preEventCrawlOffset is added
before the given date time
* @param end the end time of the event, postEventCrawlOffset is added after
the given date time
- * @param metricName the affected metric name
- * @param serviceName the affected service name
* @param targetDimensions the affected dimensions
* @return a list of related events
*/
- public List<EventDTO> getRelatedEvents(EventType eventType, DateTime start,
DateTime end
- , String metricName, String serviceName, Map<String, List<String>>
targetDimensions) {
- List<EventDTO> relatedEvents = new ArrayList<>();
-
- // Set Event Filters
+ public List<EventDTO> getHolidayEvents(DateTime start, DateTime end,
Map<String, List<String>> targetDimensions) {
EventFilter eventFilter = new EventFilter();
+ eventFilter.setEventType(EventType.HOLIDAY.name());
eventFilter.setStartTime(start.minus(preEventCrawlOffset).getMillis());
eventFilter.setEndTime(end.plus(postEventCrawlOffset).getMillis());
- eventFilter.setMetricName(metricName);
- eventFilter.setServiceName(serviceName);
eventFilter.setTargetDimensionMap(targetDimensions);
- eventFilter.setEventType(eventType.toString());
+ LOG.info("Fetching holidays with preEventCrawlOffset {} and
postEventCrawlOffset {}", preEventCrawlOffset, postEventCrawlOffset);
return new HolidayEventProvider().getEvents(eventFilter);
}
diff --git
a/thirdeye/thirdeye-pinot/src/main/java/com/linkedin/thirdeye/alert/content/EmailContentFormatterConfiguration.java
b/thirdeye/thirdeye-pinot/src/main/java/com/linkedin/thirdeye/alert/content/EmailContentFormatterConfiguration.java
index fa9349613c..f904803fc0 100644
---
a/thirdeye/thirdeye-pinot/src/main/java/com/linkedin/thirdeye/alert/content/EmailContentFormatterConfiguration.java
+++
b/thirdeye/thirdeye-pinot/src/main/java/com/linkedin/thirdeye/alert/content/EmailContentFormatterConfiguration.java
@@ -18,6 +18,7 @@
import com.linkedin.thirdeye.anomaly.SmtpConfiguration;
import com.linkedin.thirdeye.anomaly.ThirdEyeAnomalyConfiguration;
+import java.util.List;
import static com.linkedin.thirdeye.anomaly.SmtpConfiguration.SMTP_CONFIG_KEY;
@@ -32,6 +33,7 @@
private String phantomJsPath = "";
private String failureFromAddress;
private String failureToAddress;
+ private List<String> holidayCountriesWhitelist;
public String getFunctionConfigPath() {
return functionConfigPath;
@@ -97,6 +99,14 @@ public void setFailureToAddress(String failureToAddress) {
this.failureToAddress = failureToAddress;
}
+ public List<String> getHolidayCountriesWhitelist() {
+ return holidayCountriesWhitelist;
+ }
+
+ public void setHolidayCountriesWhitelist(List<String>
holidayCountriesWhitelist) {
+ this.holidayCountriesWhitelist = holidayCountriesWhitelist;
+ }
+
public static EmailContentFormatterConfiguration
fromThirdEyeAnomalyConfiguration(ThirdEyeAnomalyConfiguration thirdeyeConfig) {
EmailContentFormatterConfiguration emailConfig = new
EmailContentFormatterConfiguration();
emailConfig.setDashboardHost(thirdeyeConfig.getDashboardHost());
@@ -106,6 +116,7 @@ public static EmailContentFormatterConfiguration
fromThirdEyeAnomalyConfiguratio
emailConfig.setFunctionConfigPath(thirdeyeConfig.getFunctionConfigPath());
emailConfig.setAlertFilterConfigPath(thirdeyeConfig.getAlertFilterConfigPath());
emailConfig.setPhantomJsPath(thirdeyeConfig.getPhantomJsPath());
+
emailConfig.setHolidayCountriesWhitelist(thirdeyeConfig.getHolidayCountriesWhitelist());
emailConfig.setSmtpConfiguration(
SmtpConfiguration.createFromProperties(thirdeyeConfig.getAlerterConfiguration().get(SMTP_CONFIG_KEY)));
diff --git
a/thirdeye/thirdeye-pinot/src/main/java/com/linkedin/thirdeye/alert/content/HierarchicalAnomaliesEmailContentFormatter.java
b/thirdeye/thirdeye-pinot/src/main/java/com/linkedin/thirdeye/alert/content/HierarchicalAnomaliesEmailContentFormatter.java
index 900852929d..3d2b1dd3e3 100644
---
a/thirdeye/thirdeye-pinot/src/main/java/com/linkedin/thirdeye/alert/content/HierarchicalAnomaliesEmailContentFormatter.java
+++
b/thirdeye/thirdeye-pinot/src/main/java/com/linkedin/thirdeye/alert/content/HierarchicalAnomaliesEmailContentFormatter.java
@@ -153,9 +153,10 @@ private AnomalyReportEntity
generateAnomalyReportEntity(MergedAnomalyResultDTO a
if (affectedCountries.size() > 0) { // if the anomaly is on country level
Map<String, List<String>> targetDimensions = new HashMap<>();
targetDimensions.put(EVENT_FILTER_COUNTRY, affectedCountries);
- relatedEvents.addAll(getRelatedEvents(EventType.HOLIDAY,
- new DateTime(anomaly.getStartTime(), dateTimeZone), new
DateTime(anomaly.getEndTime(), dateTimeZone),
- null, null, targetDimensions));
+ relatedEvents.addAll(getHolidayEvents(
+ new DateTime(anomaly.getStartTime(), dateTimeZone),
+ new DateTime(anomaly.getEndTime(), dateTimeZone),
+ targetDimensions));
}
return anomalyReport;
diff --git
a/thirdeye/thirdeye-pinot/src/main/java/com/linkedin/thirdeye/alert/content/MultipleAnomaliesEmailContentFormatter.java
b/thirdeye/thirdeye-pinot/src/main/java/com/linkedin/thirdeye/alert/content/MultipleAnomaliesEmailContentFormatter.java
index 24c5b27afb..dd82847d3c 100644
---
a/thirdeye/thirdeye-pinot/src/main/java/com/linkedin/thirdeye/alert/content/MultipleAnomaliesEmailContentFormatter.java
+++
b/thirdeye/thirdeye-pinot/src/main/java/com/linkedin/thirdeye/alert/content/MultipleAnomaliesEmailContentFormatter.java
@@ -52,12 +52,9 @@
private static final Logger LOG =
LoggerFactory.getLogger(MultipleAnomaliesEmailContentFormatter.class);
public static final String EMAIL_TEMPLATE = "emailTemplate";
- private static final String DATE_PATTERN = "MMM dd, HH:mm";
public static final String DEFAULT_EMAIL_TEMPLATE =
"holiday-anomaly-report.ftl";
- private static final long EVENT_TIME_TOLERANCE = TimeUnit.DAYS.toMillis(2);
- private EventManager eventDAO = null;
private DetectionConfigManager configDAO = null;
public MultipleAnomaliesEmailContentFormatter(){
@@ -68,7 +65,6 @@ public MultipleAnomaliesEmailContentFormatter(){
public void init(Properties properties, EmailContentFormatterConfiguration
configuration) {
super.init(properties, configuration);
this.emailTemplate = properties.getProperty(EMAIL_TEMPLATE,
DEFAULT_EMAIL_TEMPLATE);
- this.eventDAO = DAORegistry.getInstance().getEventDAO();
this.configDAO = DAORegistry.getInstance().getDetectionConfigManager();
}
@@ -163,8 +159,9 @@ public int compare(AnomalyResult o1, AnomalyResult o2) {
// holidays
final DateTime eventStart = windowStart.minus(preEventCrawlOffset);
final DateTime eventEnd = windowEnd.plus(postEventCrawlOffset);
- List<EventDTO> holidays =
eventDAO.findEventsBetweenTimeRange(EventType.HOLIDAY.toString(),
- eventStart.getMillis(), eventEnd.getMillis());
+ Map<String, List<String>> targetDimensions = new HashMap<>();
+ targetDimensions.put(EVENT_FILTER_COUNTRY,
emailContentFormatterConfiguration.getHolidayCountriesWhitelist());
+ List<EventDTO> holidays = getHolidayEvents(eventStart, eventEnd,
targetDimensions);
Collections.sort(holidays, new Comparator<EventDTO>() {
@Override
public int compare(EventDTO o1, EventDTO o2) {
diff --git
a/thirdeye/thirdeye-pinot/src/main/java/com/linkedin/thirdeye/anomaly/ThirdEyeAnomalyConfiguration.java
b/thirdeye/thirdeye-pinot/src/main/java/com/linkedin/thirdeye/anomaly/ThirdEyeAnomalyConfiguration.java
index e6f985b66d..d166a5c0c6 100644
---
a/thirdeye/thirdeye-pinot/src/main/java/com/linkedin/thirdeye/anomaly/ThirdEyeAnomalyConfiguration.java
+++
b/thirdeye/thirdeye-pinot/src/main/java/com/linkedin/thirdeye/anomaly/ThirdEyeAnomalyConfiguration.java
@@ -22,6 +22,7 @@
import com.linkedin.thirdeye.common.ThirdEyeConfiguration;
import java.util.Collection;
import java.util.HashSet;
+import java.util.List;
public class ThirdEyeAnomalyConfiguration extends ThirdEyeConfiguration {
@@ -46,6 +47,7 @@
private TaskDriverConfiguration taskDriverConfiguration = new
TaskDriverConfiguration();
private String failureFromAddress;
private String failureToAddress;
+ private List<String> holidayCountriesWhitelist;
public HolidayEventsLoaderConfiguration
getHolidayEventsLoaderConfiguration() {
return holidayEventsLoaderConfiguration;
@@ -198,4 +200,12 @@ public String getFailureToAddress() {
public void setFailureToAddress(String failureToAddress) {
this.failureToAddress = failureToAddress;
}
+
+ public List<String> getHolidayCountriesWhitelist() {
+ return holidayCountriesWhitelist;
+ }
+
+ public void setHolidayCountriesWhitelist(List<String>
holidayCountriesWhitelist) {
+ this.holidayCountriesWhitelist = holidayCountriesWhitelist;
+ }
}
diff --git
a/thirdeye/thirdeye-pinot/src/main/java/com/linkedin/thirdeye/anomaly/events/EventFilter.java
b/thirdeye/thirdeye-pinot/src/main/java/com/linkedin/thirdeye/anomaly/events/EventFilter.java
index a29eaefecf..f61826f8ab 100644
---
a/thirdeye/thirdeye-pinot/src/main/java/com/linkedin/thirdeye/anomaly/events/EventFilter.java
+++
b/thirdeye/thirdeye-pinot/src/main/java/com/linkedin/thirdeye/anomaly/events/EventFilter.java
@@ -105,7 +105,6 @@ public void setStartTime(long startTime) {
// if filter map not empty, filter events
if (MapUtils.isNotEmpty(eventFilterDimensionMap)) {
-
// go over each event
for (EventDTO event : allEvents) {
boolean eventAdded = false;
@@ -163,8 +162,10 @@ private static String transformDimensionName(String
dimensionName) {
private static List<String> transformDimensionValues(List<String>
dimensionValues) {
List<String> dimensionValuesTransformed = new ArrayList<>();
- for (String value : dimensionValues) {
- dimensionValuesTransformed.add(value.toLowerCase());
+ if (dimensionValues != null) {
+ for (String value : dimensionValues) {
+ dimensionValuesTransformed.add(value.toLowerCase());
+ }
}
return dimensionValuesTransformed;
}
diff --git
a/thirdeye/thirdeye-pinot/src/main/java/com/linkedin/thirdeye/anomaly/events/HolidayEventProvider.java
b/thirdeye/thirdeye-pinot/src/main/java/com/linkedin/thirdeye/anomaly/events/HolidayEventProvider.java
index b172617b63..6455823ccd 100644
---
a/thirdeye/thirdeye-pinot/src/main/java/com/linkedin/thirdeye/anomaly/events/HolidayEventProvider.java
+++
b/thirdeye/thirdeye-pinot/src/main/java/com/linkedin/thirdeye/anomaly/events/HolidayEventProvider.java
@@ -21,19 +21,24 @@
import com.linkedin.thirdeye.datasource.DAORegistry;
import java.util.List;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
public class HolidayEventProvider implements EventDataProvider<EventDTO> {
+ private static final Logger LOG =
LoggerFactory.getLogger(HolidayEventProvider.class);
+
private EventManager eventDAO = DAORegistry.getInstance().getEventDAO();
@Override
public List<EventDTO> getEvents(EventFilter eventFilter) {
+ LOG.info("Fetching all {} events between {} and {}",
eventFilter.getEventType(), eventFilter.getStartTime(),
eventFilter.getEndTime());
+ List<EventDTO> allEventsBetweenTimeRange =
eventDAO.findEventsBetweenTimeRange(
+ eventFilter.getEventType(),
+ eventFilter.getStartTime(),
+ eventFilter.getEndTime());
- List<EventDTO> allEventsBetweenTimeRange =
- eventDAO.findEventsBetweenTimeRange(EventType.HOLIDAY.name(),
eventFilter.getStartTime(),
- eventFilter.getEndTime());
-
- List<EventDTO> holidayEvents =
EventFilter.applyDimensionFilter(allEventsBetweenTimeRange,
eventFilter.getTargetDimensionMap());
- return holidayEvents;
+ return EventFilter.applyDimensionFilter(allEventsBetweenTimeRange,
eventFilter.getTargetDimensionMap());
}
@Override
diff --git
a/thirdeye/thirdeye-pinot/src/test/java/com/linkedin/thirdeye/eventprovider/TestHolidayEventProvider.java
b/thirdeye/thirdeye-pinot/src/test/java/com/linkedin/thirdeye/eventprovider/TestHolidayEventProvider.java
index 0a0af8b52f..b5ef670f79 100644
---
a/thirdeye/thirdeye-pinot/src/test/java/com/linkedin/thirdeye/eventprovider/TestHolidayEventProvider.java
+++
b/thirdeye/thirdeye-pinot/src/test/java/com/linkedin/thirdeye/eventprovider/TestHolidayEventProvider.java
@@ -109,6 +109,7 @@ public void testGetEvents() {
// check that it gets all HOLIDAY events in time range, and only HOLIDAY
events
eventFilter.setStartTime(hoursAgo5);
eventFilter.setEndTime(hoursAgo3);
+ eventFilter.setEventType(EventType.HOLIDAY.name());
events = holidayEventProvider.getEvents(eventFilter);
Assert.assertEquals(events.size(), 2);
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]
With regards,
Apache Git Services
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]