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

com.ebay.jetstream.counter.LongEWMACounter 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.counter;

import java.util.Timer;
import java.util.TimerTask;

import com.ebay.jetstream.util.math.EWMA;

/**
 * @author shmurthy
 * 
 */
public class LongEWMACounter {

  public static class EWMAUpdateTask extends TimerTask {

    private final LongEWMACounter m_ewmaCounter;

    public EWMAUpdateTask(LongEWMACounter ewmaCounter) {
      m_ewmaCounter = ewmaCounter;
    }

    /*
     * (non-Javadoc)
     * 
     * @see java.util.TimerTask#run()
     */
    @Override
    public void run() {
      m_ewmaCounter.updateEWMA();

    }

  }

  private final static int WITH_ONE_SEC_DELAY = 1000;
  private final static int ONE_SECOND_PERIOD = 1000;

  private final LongCounter m_count = new LongCounter();

  private final EWMA m_ewma;
  private final Timer m_timer;
  private final EWMAUpdateTask m_timertask;

  public LongEWMACounter(int duration, Timer timer) {
    m_ewma = new EWMA(duration);
    m_timer = timer;
    m_timertask = new EWMAUpdateTask(this);
    m_timer.scheduleAtFixedRate(m_timertask, WITH_ONE_SEC_DELAY, ONE_SECOND_PERIOD);

  }
  
  public LongEWMACounter(int duration, Timer timer, int period) {
	    m_ewma = new EWMA(duration);
	    m_timer = timer;
	    m_timertask = new EWMAUpdateTask(this);
	    m_timer.scheduleAtFixedRate(m_timertask, period, period);

  }

  public void add(long value) {
    m_count.addAndGet(value);
  }

  public void destroy() {
    m_timertask.cancel();
  }

  // this method is expected to be invoked every sec

  public long get() {
    return (long) m_ewma.getAverage();
  }

  public void increment() {
    m_count.increment();

  }

  /**
   * 
   */
  public void reset() {
    m_count.getAndReset();
  }

  private void updateEWMA() {

    m_ewma.add(m_count.getAndReset());

  }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy