package com.sequenceiq.cloudbreak.service.events; import javax.inject.Inject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; import com.sequenceiq.cloudbreak.domain.CloudbreakEvent; import com.sequenceiq.cloudbreak.logger.MDCBuilder; import com.sequenceiq.cloudbreak.service.notification.NotificationAssemblingService; import com.sequenceiq.cloudbreak.service.notification.NotificationSender; import reactor.bus.Event; import reactor.fn.Consumer; @Component public class CloudbreakEventHandler implements Consumer<Event<CloudbreakEventData>> { private static final Logger LOGGER = LoggerFactory.getLogger(CloudbreakEventHandler.class); @Inject private CloudbreakEventService eventService; @Inject private NotificationSender notificationSender; @Inject private NotificationAssemblingService notificationAssemblingService; @Override public void accept(Event<CloudbreakEventData> cloudbreakEvent) { LOGGER.info("Handling cloudbreak event: {}", cloudbreakEvent); CloudbreakEventData event = cloudbreakEvent.getData(); MDCBuilder.buildMdcContext(event); LOGGER.info("Persisting data: {}", event); CloudbreakEvent persistedEvent = eventService.createStackEvent(event); LOGGER.info("Sending notification with data: {}", persistedEvent); notificationSender.send(notificationAssemblingService.createNotification(persistedEvent)); } }