Events¶
Kylo publishes events to a message bus that you can subscribe to and react to changes in the system with custom plugins.
Below is a listing of the events Kylo publishes.
Event | Description |
---|---|
CategoryChangeEvent | Called when a Category is created, updated, or deleted |
FeedChangeEvent | Called when a Feed is created, updated, or deleted |
FeedPropertyChangeEvent | Called when a user updates the generic set of properties on a feed. See the Nifi processor PutFeedMetadata |
PreconditionTriggerEvent | Called when a precondition is fired for a feed |
CleanupTriggerEvent | Called when a feed is being cleaned up after a delete |
FeedOperationStatusEvent | Called when a Job for a feed has started, stopped, succeeded, failed, or been abandoned |
TemplateChangeEvent | Called when a Template is created, updated, or deleted |
ServiceLevelAgreementEvent | As of Kylo 0.8.4, Called only when an SLA is deleted. |
Event Source¶
All events extends the AbstractMetadataEvent object. You can find relevant source code for the events here: https://github.com/Teradata/kylo/tree/master/metadata/metadata-api/src/main/java/com/thinkbiganalytics/metadata/api/event
Example Feed Change Listener¶
import com.thinkbiganalytics.metadata.api.event.MetadataChange; import com.thinkbiganalytics.metadata.api.event.MetadataEventListener; import com.thinkbiganalytics.metadata.api.event.MetadataEventService; import com.thinkbiganalytics.metadata.api.event.feed.FeedChangeEvent; import com.thinkbiganalytics.metadata.api.event.feed.FeedOperationStatusEvent; import com.thinkbiganalytics.metadata.api.feed.Feed; import com.thinkbiganalytics.metadata.api.op.FeedOperation; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; import java.util.Optional; import javax.annotation.Nonnull; import javax.annotation.PostConstruct; import javax.inject.Inject; @Component public class ExampleFeedListener { private static final Logger log = LoggerFactory.getLogger(ExampleFeedListener.class); @Inject private MetadataEventService metadataEventService; /** * Listen for when feeds change */ private final MetadataEventListener<FeedChangeEvent> feedPropertyChangeListener = new FeedChangeEventDispatcher(); /** * Listen for when feed job executions change */ private final MetadataEventListener<FeedOperationStatusEvent> feedJobEventListener = new FeedJobEventListener(); @PostConstruct public void addEventListener() { metadataEventService.addListener(feedPropertyChangeListener); metadataEventService.addListener(feedJobEventListener); } private class FeedChangeEventDispatcher implements MetadataEventListener<FeedChangeEvent> { @Override public void notify(@Nonnull final FeedChangeEvent metadataEvent) { //feedName will be the 'categorySystemName.feedSystemName' Optional<String> feedName = metadataEvent.getData().getFeedName(); //the id for the feed Feed.ID feedId = metadataEvent.getData().getFeedId(); //feed state will be NEW, ENABLED, DISABLED, DELETED Feed.State feedState = metadataEvent.getData().getFeedState(); if (feedName.isPresent()) { log.info("Feed {} ({}) has been {} ", feedName.get(), feedId, metadataEvent.getData().getChange()); Feed.State state = metadataEvent.getData().getFeedState(); if (metadataEvent.getData().getChange() == MetadataChange.ChangeType.CREATE) { //Do something on Create } else if (metadataEvent.getData().getChange() == MetadataChange.ChangeType.UPDATE) { //Do something on Update } else if (metadataEvent.getData().getChange() == MetadataChange.ChangeType.DELETE) { //Do something on Delete } } } } private class FeedJobEventListener implements MetadataEventListener<FeedOperationStatusEvent> { @Override public void notify(FeedOperationStatusEvent event) { //feedName will be the 'categorySystemName.feedSystemName' String feedName = event.getData().getFeedName(); //the id for the feed Feed.ID feedId = event.getData().getFeedId(); //This is the Job Execution Id FeedOperation.ID jobId = event.getData().getOperationId(); //this is {STARTED, SUCCESS, FAILURE, CANCELED, ABANDONED} FeedOperation.State jobState = event.getData().getState(); //this is CHECK or FEED. CHECK refers to a Data Confidence Job FeedOperation.FeedType feedType = event.getData().getFeedType(); //a string message of what the event is for String statusMessage = event.getData().getStatus(); if(event.getData().getState() == FeedOperation.State.SUCCESS){ // Do something if a Job successfully completes } } } }