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

com.ebay.jetstream.notification.RateLimitingDefStatus 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.notification;


import java.util.Date;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicLong;

import com.ebay.jetstream.xmlser.XSerializable;


/***

 * 
 * @author gjin
 *
 */


/***
 * implement XSerializable so we can see the object display (for those gettable fields.
 *
 */
public class RateLimitingDefStatus  implements XSerializable{
	/* def */
	private long            m_windowSizeInMS;
	private int   	        m_maxNumOfAlerts;
	
	/* status for a window */
	private AtomicInteger   m_numOfAlertsProcessed = new AtomicInteger(0);
	private long            m_sinceTimeInMS;
	private AtomicInteger   m_dropCount = new AtomicInteger(0); /* total drop count for entire window */
	
	/*** whole life status of the application ***/
    private AtomicLong      m_totalAlertsDropped = new AtomicLong(0);
    private AtomicLong      m_totalAlertsSent = new AtomicLong(0);
    
	public static  RateLimitingDefStatus createUnRegisteredRDS() {
		RateLimitingDefStatus rds = new RateLimitingDefStatus();
		rds.m_windowSizeInMS = -1;
		rds.m_maxNumOfAlerts = -1;
		rds.m_sinceTimeInMS = System.currentTimeMillis();
		return rds;
	}
	
	public void setWindowSizeInMS(long size) {
		m_windowSizeInMS = size;
	}
	public long getWindowSizeInMS() {
		return m_windowSizeInMS;
	}
	public void setMaxNumOfAlerts(int max) {
		m_maxNumOfAlerts = max;
	}
	public int getMaxNumOfAlerts() {
		return m_maxNumOfAlerts;
	}
	public int getNumOfAlertsProcessed() {
		return m_numOfAlertsProcessed.get();
	}
	public long getDropCount() {
		return m_dropCount.get();
	}
	public Date getSinceDateTime(){
		return new Date(m_sinceTimeInMS);
	}
	
	public long getTotalAlertsSent() {
		return m_totalAlertsSent.get();
	}
	public long getTotalAlertsDropped(){
		return m_totalAlertsDropped.get();
	}
	
	public void initStatus() {
		m_numOfAlertsProcessed=new AtomicInteger(0);
		m_dropCount = new AtomicInteger(0);
		m_sinceTimeInMS = System.currentTimeMillis();
	}

	public void increaseDropCount() {
		m_dropCount.getAndIncrement();
		m_totalAlertsDropped.getAndIncrement();
	}
	public void increaseProcessedCount() {
		m_numOfAlertsProcessed.getAndIncrement();
		m_totalAlertsSent.getAndIncrement();
	}
	/*
	public void increaseTotalSentCount() {
		m_totalAlertsSent.getAndIncrement();
	}
	*/
	
	public static RateLimitingDefStatus cloneRateLimitiongDef(RateLimitingDefStatus old) {
		RateLimitingDefStatus rds = new RateLimitingDefStatus();
		rds.m_maxNumOfAlerts = old.m_maxNumOfAlerts;
		rds.m_windowSizeInMS = old.m_windowSizeInMS;
		return rds;
	}
	public boolean canSendOneMore() {
		long currentTimeInMS = System.currentTimeMillis();
		long timeDiffInMS = currentTimeInMS - m_sinceTimeInMS;
		
		if (timeDiffInMS < m_windowSizeInMS) {
			if (m_numOfAlertsProcessed.get() < m_maxNumOfAlerts) {
				return true;
			} else {
				return false;
			}
		} else {
			initStatus();
			return true;
		}
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy