package com.linkedin.thirdeye.anomaly.events; import java.io.File; import java.lang.reflect.Constructor; import java.util.List; import java.util.Map; import org.apache.commons.collections.CollectionUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.dataformat.yaml.YAMLFactory; import com.linkedin.thirdeye.datalayer.dto.EventDTO; import com.linkedin.thirdeye.rootcause.impl.RCAConfiguration; public class EventDataProviderLoader { private static final Logger LOG = LoggerFactory.getLogger(EventDataProviderLoader.class); private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(new YAMLFactory()); public static void registerEventDataProvidersFromConfig(File rcaConfig, EventDataProviderManager eventProvider) { try { RCAConfiguration rcaConfiguration = OBJECT_MAPPER.readValue(rcaConfig, RCAConfiguration.class); List<EventDataProviderConfiguration> eventDataProvidersConfiguration = rcaConfiguration.getEventDataProvidersConfiguration(); if (CollectionUtils.isNotEmpty(eventDataProvidersConfiguration)) { for (EventDataProviderConfiguration eventDataProviderConfig : eventDataProvidersConfiguration) { String name = eventDataProviderConfig.getName(); String className = eventDataProviderConfig.getClassName(); Map<String, String> properties = eventDataProviderConfig.getProperties(); Constructor<?> constructor = Class.forName(className).getConstructor(String.class, Map.class); EventDataProvider<EventDTO> eventDataProvider = (EventDataProvider) constructor.newInstance(name, properties); eventProvider.registerEventDataProvider(name, eventDataProvider); } } } catch (Exception e) { LOG.error("Exception in loading rca configs", e); } } }