/* * Copyright (c) MuleSoft, Inc. All rights reserved. http://www.mulesoft.com * The software in this package is published under the terms of the CPAL v1.0 * license, a copy of which has been included with this distribution in the * LICENSE.txt file. */ package org.mule.runtime.core.agent; import org.mule.runtime.api.exception.MuleException; import org.mule.runtime.core.api.context.MuleContextBuilder; import org.mule.runtime.core.api.context.notification.ConnectionNotificationListener; import org.mule.runtime.core.api.context.notification.CustomNotificationListener; import org.mule.runtime.core.api.context.notification.ManagementNotificationListener; import org.mule.runtime.core.api.context.notification.MuleContextNotificationListener; import org.mule.runtime.core.api.context.notification.SecurityNotificationListener; import org.mule.runtime.core.api.context.notification.ServerNotification; import org.mule.runtime.core.api.context.notification.ServerNotificationListener; import org.mule.runtime.api.lifecycle.InitialisationException; import org.mule.runtime.core.context.notification.ComponentMessageNotification; import org.mule.runtime.core.context.notification.ConnectionNotification; import org.mule.runtime.core.context.notification.ManagementNotification; import org.mule.runtime.core.context.notification.MessageProcessorNotification; import org.mule.runtime.core.context.notification.MuleContextNotification; import org.mule.runtime.core.context.notification.NotificationException; import org.mule.runtime.core.context.notification.SecurityNotification; import java.util.HashSet; import java.util.Set; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * <code>AbstractNotificationLoggerAgent</code> Receives Mule server notifications and logs them and can optionally route them to * an endpoint. This agent will only receive notifications for notification events that are enabled. The notifications that are * enabled are determined by the {@link MuleContextBuilder} that is used or configuration mechanisms that may override these * values. */ public abstract class AbstractNotificationLoggerAgent extends AbstractAgent { /** * The logger used for this class */ protected transient Logger logger = LoggerFactory.getLogger(getClass()); private boolean ignoreManagerNotifications = false; private boolean ignoreConnectionNotifications = false; private boolean ignoreSecurityNotifications = false; private boolean ignoreManagementNotifications = false; private boolean ignoreCustomNotifications = false; private boolean ignoreAdminNotifications = false; private boolean ignoreMessageNotifications = false; private boolean ignoreComponentMessageNotifications = false; private boolean ignoreMessageProcessorNotifications = true; protected Set<ServerNotificationListener<? extends ServerNotification>> listeners = new HashSet<ServerNotificationListener<? extends ServerNotification>>(); protected AbstractNotificationLoggerAgent(String name) { super(name); } @Override public void start() throws MuleException { // nothing to do } @Override public void stop() throws MuleException { // nothing to do } @Override public void dispose() { for (ServerNotificationListener<?> listener : listeners) { muleContext.unregisterListener(listener); } } public boolean isIgnoreManagerNotifications() { return ignoreManagerNotifications; } public void setIgnoreManagerNotifications(boolean ignoreManagerNotifications) { this.ignoreManagerNotifications = ignoreManagerNotifications; } public boolean isIgnoreMessageNotifications() { return ignoreMessageNotifications; } public void setIgnoreMessageNotifications(boolean ignoreMessageNotifications) { this.ignoreMessageNotifications = ignoreMessageNotifications; } public boolean isIgnoreSecurityNotifications() { return ignoreSecurityNotifications; } public void setIgnoreSecurityNotifications(boolean ignoreSecurityNotifications) { this.ignoreSecurityNotifications = ignoreSecurityNotifications; } public boolean isIgnoreManagementNotifications() { return ignoreManagementNotifications; } public void setIgnoreManagementNotifications(boolean ignoreManagementNotifications) { this.ignoreManagementNotifications = ignoreManagementNotifications; } public boolean isIgnoreCustomNotifications() { return ignoreCustomNotifications; } public void setIgnoreCustomNotifications(boolean ignoreCustomNotifications) { this.ignoreCustomNotifications = ignoreCustomNotifications; } public boolean isIgnoreAdminNotifications() { return ignoreAdminNotifications; } public void setIgnoreAdminNotifications(boolean ignoreAdminNotifications) { this.ignoreAdminNotifications = ignoreAdminNotifications; } public boolean isIgnoreConnectionNotifications() { return ignoreConnectionNotifications; } public void setIgnoreConnectionNotifications(boolean ignoreConnectionNotifications) { this.ignoreConnectionNotifications = ignoreConnectionNotifications; } public boolean isIgnoreComponentMessageNotifications() { return ignoreComponentMessageNotifications; } public void setIgnoreComponentMessageNotifications(boolean ignoreComponentMessageNotifications) { this.ignoreComponentMessageNotifications = ignoreComponentMessageNotifications; } public boolean isIgnoreMessageProcessorNotifications() { return ignoreMessageProcessorNotifications; } public void setIgnoreMessageProcessorNotifications(boolean ignoreMessageProcessorNotifications) { this.ignoreMessageProcessorNotifications = ignoreMessageProcessorNotifications; } @Override public final void initialise() throws InitialisationException { doInitialise(); if (!ignoreManagerNotifications) { ServerNotificationListener<MuleContextNotification> l = new MuleContextNotificationListener<MuleContextNotification>() { @Override public void onNotification(MuleContextNotification notification) { logEvent(notification); } }; try { muleContext.registerListener(l); } catch (NotificationException e) { throw new InitialisationException(e, this); } listeners.add(l); } if (!ignoreSecurityNotifications) { ServerNotificationListener<SecurityNotification> l = new SecurityNotificationListener<SecurityNotification>() { @Override public void onNotification(SecurityNotification notification) { logEvent(notification); } }; try { muleContext.registerListener(l); } catch (NotificationException e) { throw new InitialisationException(e, this); } listeners.add(l); } if (!ignoreManagementNotifications) { ServerNotificationListener<ManagementNotification> l = new ManagementNotificationListener<ManagementNotification>() { @Override public void onNotification(ManagementNotification notification) { logEvent(notification); } }; try { muleContext.registerListener(l); } catch (NotificationException e) { throw new InitialisationException(e, this); } listeners.add(l); } if (!ignoreCustomNotifications) { ServerNotificationListener<?> l = new CustomNotificationListener<ServerNotification>() { @Override public void onNotification(ServerNotification notification) { logEvent(notification); } }; try { muleContext.registerListener(l); } catch (NotificationException e) { throw new InitialisationException(e, this); } listeners.add(l); } if (!ignoreConnectionNotifications) { ServerNotificationListener<ConnectionNotification> l = new ConnectionNotificationListener<ConnectionNotification>() { @Override public void onNotification(ConnectionNotification notification) { logEvent(notification); } }; try { muleContext.registerListener(l); } catch (NotificationException e) { throw new InitialisationException(e, this); } listeners.add(l); } if (!ignoreMessageNotifications && !ignoreComponentMessageNotifications) { ServerNotificationListener<ComponentMessageNotification> l = notification -> logEvent(notification); try { muleContext.registerListener(l); } catch (NotificationException e) { throw new InitialisationException(e, this); } listeners.add(l); } if (!ignoreMessageNotifications && !ignoreMessageProcessorNotifications) { ServerNotificationListener<MessageProcessorNotification> l = notification -> logEvent(notification); try { muleContext.registerListener(l); } catch (NotificationException e) { throw new InitialisationException(e, this); } listeners.add(l); } } protected abstract void doInitialise() throws InitialisationException; protected abstract void logEvent(ServerNotification e); }