package com.linkedin.thirdeye.anomaly.events; import com.linkedin.thirdeye.client.DAORegistry; import com.linkedin.thirdeye.datalayer.bao.MergedAnomalyResultManager; import com.linkedin.thirdeye.datalayer.dto.EventDTO; import com.linkedin.thirdeye.datalayer.dto.MergedAnomalyResultDTO; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class HistoricalAnomalyEventProvider implements EventDataProvider<EventDTO> { private MergedAnomalyResultManager mergedAnomalyDAO = DAORegistry.getInstance().getMergedAnomalyResultDAO(); @Override public List<EventDTO> getEvents(EventFilter eventFilter) { List<MergedAnomalyResultDTO> mergedAnomalies; List<EventDTO> events = new ArrayList<>(); if (eventFilter.getMetricName() == null) { mergedAnomalies = mergedAnomalyDAO.findByTime(eventFilter.getStartTime(), eventFilter.getStartTime()); } else { mergedAnomalies = mergedAnomalyDAO .findByMetricTime(eventFilter.getMetricName(), eventFilter.getStartTime(), eventFilter.getStartTime(), false); } if (mergedAnomalies != null) { for(MergedAnomalyResultDTO mergedAnomalyResultDTO : mergedAnomalies) { events.add(getAnomalyEvent(mergedAnomalyResultDTO)); } } return events; } private EventDTO getAnomalyEvent(MergedAnomalyResultDTO anomalyResultDTO) { EventDTO eventDTO = new EventDTO(); eventDTO.setEventType(EventType.HISTORICAL_ANOMALY.name()); eventDTO.setStartTime(anomalyResultDTO.getStartTime()); eventDTO.setEndTime(anomalyResultDTO.getEndTime()); eventDTO.setMetric(anomalyResultDTO.getMetric()); eventDTO.setId(anomalyResultDTO.getId()); Map<String, List<String>> dimensionValuesMap = new HashMap<>(); if (anomalyResultDTO.getDimensions() != null && anomalyResultDTO.getDimensions().size() > 0) { for (String dimension : anomalyResultDTO.getDimensions().keySet()) { List<String> dimensionValues; if (dimensionValuesMap.containsKey(dimension)) { dimensionValues = dimensionValuesMap.get(dimension); } else { dimensionValues = new ArrayList<>(); dimensionValuesMap.put(dimension, dimensionValues); } dimensionValues.add(anomalyResultDTO.getDimensions().get(dimension)); } } eventDTO.setTargetDimensionMap(dimensionValuesMap); return eventDTO; } @Override public String getEventType() { return EventType.HISTORICAL_ANOMALY.toString(); } }