All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.ebay.jetstream.event.channel.AbstractOutboundChannel Maven / Gradle / Ivy

/*******************************************************************************
 *  Copyright © 2012-2015 eBay Software Foundation
 *  This program is dual licensed under the MIT and Apache 2.0 licenses.
 *  Please see LICENSE for more information.
 *******************************************************************************/
package com.ebay.jetstream.event.channel;

import java.util.concurrent.atomic.AtomicBoolean;

import org.springframework.beans.factory.InitializingBean;
import org.springframework.context.ApplicationEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.jmx.export.annotation.ManagedOperation;

import com.ebay.jetstream.common.ShutDownable;
import com.ebay.jetstream.config.AbstractNamedBean;
import com.ebay.jetstream.counter.LongCounter;
import com.ebay.jetstream.counter.LongEWMACounter;
import com.ebay.jetstream.event.EventException;
import com.ebay.jetstream.event.JetstreamEvent;
import com.ebay.jetstream.event.advice.Advice;
import com.ebay.jetstream.messaging.MessageServiceTimer;
import com.ebay.jetstream.notification.AlertListener;
import com.ebay.jetstream.notification.AlertListener.AlertStrength;
import com.ebay.jetstream.spring.beans.factory.BeanChangeAware;
import com.ebay.jetstream.xmlser.Hidden;

public abstract class AbstractOutboundChannel extends AbstractNamedBean
		implements OutboundChannel, BeanChangeAware, InitializingBean,
		ApplicationListener, ShutDownable {

	protected final LongCounter m_alarmsRaisedCounter = new LongCounter();
	protected final LongCounter m_alarmsClearedCounter = new LongCounter();

		
	protected final LongCounter m_totalEventsSent = new LongCounter();
	protected final LongCounter m_totalEventsDropped = new LongCounter();
	protected final LongCounter m_totalEventsReceived = new LongCounter();

	protected LongEWMACounter m_eventsReceivedPerSec = new LongEWMACounter(60,
			MessageServiceTimer.sInstance().getTimer());

	protected LongEWMACounter m_eventsSentPerSec = new LongEWMACounter(60,
			MessageServiceTimer.sInstance().getTimer());

	protected final AtomicBoolean m_alarmRaised = new AtomicBoolean(false);

	JetstreamEvent m_lastEvent;

	private ChannelAlarmListener m_alarmListener;
	
	private AlertListener m_alertListener;
	
	private Advice m_adviceListener;
	
	@Hidden
	public Advice getAdviceListener() {
		return m_adviceListener;
	}

	public void setAdviceListener(Advice adviceListener) {
		this.m_adviceListener = adviceListener;
	}
	
	@Hidden
	public AlertListener getAlertListener() {
		return m_alertListener;
	}

	public void setAlertListener(AlertListener alertListner) {
		this.m_alertListener = alertListner;
	}
	

	/**
	 * @return the messagesReceived
	 */
	@Override
	public long getTotalEventsReceived() {
		return m_totalEventsReceived.get();
	}

	
	/* (non-Javadoc)
	 * @see com.ebay.jetstream.event.Monitorable#getTotalEventsSent()
	 */
	@Override
	public long getTotalEventsSent() {
		return m_totalEventsSent.get();
	}

	/* (non-Javadoc)
	 * @see com.ebay.jetstream.event.Monitorable#getTotalEventsDropped()
	 */
	@Override
	public long getTotalEventsDropped() {
		return m_totalEventsDropped.get();
	}

	/* (non-Javadoc)
	 * @see com.ebay.jetstream.event.Monitorable#getEventsReceivedPerSec()
	 */
	@Override
	public long getEventsReceivedPerSec() {
		return m_eventsReceivedPerSec.get();
	}

	/* (non-Javadoc)
	 * @see com.ebay.jetstream.event.Monitorable#getEventsSentPerSec()
	 */
	@Override
	public long getEventsSentPerSec() {
		return m_eventsSentPerSec.get();
	}

	/**
	 * @return
	 */
	public long getAlarmsRaisedCounter() {
		return m_alarmsRaisedCounter.get();
	}

	/**
	 * @return
	 */
	public long getAlarmsClearedCounter() {
		return m_alarmsClearedCounter.get();
	}

	/**
	   * 
	   */
	@ManagedOperation
	public void resetStats() {
		m_totalEventsReceived.reset();
		m_eventsReceivedPerSec.reset();
		m_totalEventsSent.reset();
		m_eventsSentPerSec.reset();
		m_totalEventsDropped.reset();
		m_alarmsRaisedCounter.reset();
		m_alarmsClearedCounter.reset();
	}

	/**
	 * 
	 */
	protected void incrementEventDroppedCounter() {
		m_totalEventsDropped.increment();
	}

	/**
	 * 
	 */
	protected void incrementEventDroppedCounter(long lNumber) {
		m_totalEventsDropped.addAndGet(lNumber);
	}
	
	/**
	 * 
	 */
	protected void incrementEventRecievedCounter() {
		m_totalEventsReceived.increment();
		m_eventsReceivedPerSec.increment();
	}

	/**
	 * 
	 */
	protected void incrementEventSentCounter() {
		m_totalEventsSent.increment();
		m_eventsSentPerSec.increment();
	}

	/**
	 * @param lNumber
	 */
	protected void incrementEventSentCounter(long lNumber) {
		m_totalEventsSent.addAndGet(lNumber);
		m_eventsSentPerSec.add(lNumber);
	}

	
	/**
	 * 
	 */
	protected void incrementAlarmsRaisedCounter() {
		m_alarmsRaisedCounter.increment();
	}

	/**
	 * 
	 */
	protected void incrementAlarmsClearedCounter() {
		m_alarmsClearedCounter.increment();
	}

	/**
	 * @return
	 */
	protected boolean getAlarmRaisedState() {
		return m_alarmRaised.get();
	}

	/**
	 * @param state
	 */
	protected void setAlarmRaisedState(boolean state) {
		m_alarmRaised.set(state);
	}

	/**
	 * @param alarmClearedCount
	 *            the alarmClearedCount to set
	 */
	@ManagedOperation
	public void resetAlarmsCleared() {
		m_alarmsClearedCounter.set(0);
	}

	/**
	 * @param alarmRaisedCount
	 *            the alarmRaisedCount to set
	 */
	@ManagedOperation
	public void resetAlarmsRaised() {
		m_alarmsRaisedCounter.set(0);
	}

	/**
	 * @param eventsDropped
	 *            the eventsDropped to set
	 */
	@ManagedOperation
	public void resetEventsDropped() {
		m_totalEventsDropped.set(0);
	}

	/**
	 * @param messagesSent
	 *            the messagesSent to set
	 */
	@ManagedOperation
	public void resetEventsSent() {
		m_totalEventsSent.set(0);
	}

	/**
	 * @param event
	 */
	protected void setLastEvent(JetstreamEvent event) {
		m_lastEvent = event;

	}

	/**
	 * @return
	 */
	public JetstreamEvent getLastEvent() {
		return m_lastEvent;

	}

	/* (non-Javadoc)
	 * @see org.springframework.context.ApplicationListener#onApplicationEvent(org.springframework.context.ApplicationEvent)
	 */
	
	public void onApplicationEvent(ApplicationEvent event) {

		processApplicationEvent(event); // we do it this way so it is consistent
										// with AbstractInboundChannel

	}
    
	
	/* (non-Javadoc)
	 * @see com.ebay.jetstream.event.channel.OutboundChannel#getAlarmListener()
	 */
	@Override
	public ChannelAlarmListener getAlarmListener() {
		return m_alarmListener;
	}

	/* (non-Javadoc)
	 * @see com.ebay.jetstream.event.channel.OutboundChannel#setAlarmListener(com.ebay.jetstream.event.channel.ChannelAlarmListener)
	 */
	@Override
	public void setAlarmListener(ChannelAlarmListener alarmListener) {
		m_alarmListener = alarmListener;

	}

	/**
	 * @param event
	 */
	public abstract void processApplicationEvent(ApplicationEvent event);
	
	public void close() throws EventException {
		m_eventsReceivedPerSec.destroy();
		m_eventsSentPerSec.destroy();
	}
	
	public void open() throws EventException {

		m_eventsReceivedPerSec = new LongEWMACounter(60, MessageServiceTimer.sInstance().getTimer());

		m_eventsSentPerSec = new LongEWMACounter(60, MessageServiceTimer.sInstance().getTimer());

	}
	
	@Override
	public long getTotalPauseCount() {
		
		return 0;
	}

	@Override
	public long getTotalResumeCount() {
		
		return 0;
	}
	
	protected void postAlert(String msg, AlertStrength strength) {
		if (m_alertListener != null) {
			m_alertListener.sendAlert(this.getBeanName(), msg, strength);
		}
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy