Package com.linkedin.databus.core.monitoring.mbean

Source Code of com.linkedin.databus.core.monitoring.mbean.AggregatedDbusEventsTotalStats

package com.linkedin.databus.core.monitoring.mbean;
/*
*
* Copyright 2013 LinkedIn Corp. All rights reserved
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*   http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied.  See the License for the
* specific language governing permissions and limitations
* under the License.
*
*/



import java.util.concurrent.locks.Lock;

import org.apache.log4j.Logger;

import com.linkedin.databus.core.monitoring.events.DbusEventsTotalStatsEvent;


/**
* A class to keep track of aggregated events across DbusEventsTotalStats across multiple buffers
* aggregated by source, peer or just buffers in dbusMulti (physicalSource)
*/
public class AggregatedDbusEventsTotalStats extends DbusEventsTotalStats
{
  public static final String MODULE = AggregatedDbusEventsTotalStats.class.getName();
  private final Logger _log;
  public AggregatedDbusEventsTotalStats(int ownerId,
                                        String dimension,
                                        boolean enabled,
                                        boolean threadSafe,
                                        DbusEventsTotalStatsEvent initData)
  {
    super(ownerId, dimension, enabled, threadSafe, initData);
    _log = Logger.getLogger(MODULE + "." + dimension);
  }



  @Override
  public AggregatedDbusEventsTotalStats clone(boolean threadSafe)
  {
    AggregatedDbusEventsTotalStats s = new AggregatedDbusEventsTotalStats(_event.ownerId, _dimension, _enabled.get(), threadSafe, null);
    //copy this to s
    cloneData(s._event);
    return s;
  }

  @Override
  public long getMinTimeSinceLastAccess()
  {
    Lock readLock = acquireReadLock();
    long result = 0;
    try
    {
      if(_event.maxTimestampAccessed <= 0//not a valid timestamp
        result = DEFAULT_MAX_LONG_VALUE;
      else
        result = System.currentTimeMillis() - _event.maxTimestampAccessed;
    }
    finally
    {
      releaseLock(readLock);
    }
    return result;
  }

  @Override
  public long getMaxTimeSinceLastAccess()
  {
    Lock readLock = acquireReadLock();
    long result = 0;
    try
    {
      if(_event.minTimestampAccessed <= 0)//not a valid timestamp
        result = DEFAULT_MIN_LONG_VALUE;
      else
        result = System.currentTimeMillis() - _event.minTimestampAccessed;
    }
    finally
    {
      releaseLock(readLock);
    }
    return result;
  }

  @Override
  public long getMinTimeSinceLastEvent()
  {
    Lock readLock = acquireReadLock();
    long result = 0;
    try
    {
      if(_event.maxTimestampMaxScnEvent <= 0)//not a valid timestamp
        result = DEFAULT_MAX_LONG_VALUE;
      else
        result = System.currentTimeMillis() - _event.maxTimestampMaxScnEvent;
    }
    finally
    {
      releaseLock(readLock);
    }
    return result;
  }

  @Override
  public long getMaxTimeSinceLastEvent()
  {
    Lock readLock = acquireReadLock();
    long result = 0;
    try
    {
      if(_event.minTimestampMaxScnEvent <= 0) //not a valid timestamp
        result = DEFAULT_MIN_LONG_VALUE;
      else
        result = System.currentTimeMillis() - _event.minTimestampMaxScnEvent;
    }
    finally
    {
      releaseLock(readLock);
    }
    return result;
  }

  @Override
  public long getMinTimeSpan()
  {
    Lock readLock = acquireReadLock();
    long result = 0;
    try
    {
      result = _event.minTimeSpan;
    }
    finally
    {
      releaseLock(readLock);
    }
    return result;
  }

  @Override
  public long getMaxTimeSpan()
  {
    Lock readLock = acquireReadLock();
    long result = 0;
    try
    {
      result = _event.maxTimeSpan;
    }
    finally
    {
      releaseLock(readLock);
    }
    return result;
  }

  @Override
  public long getMinTimeLag()
  {
    Lock readLock = acquireReadLock();
    try
    {
      return _event.minTimeLag;
    }
    finally
    {
      releaseLock(readLock);
    }
  }

  @Override
  public long getMaxTimeLag()
  {
    Lock readLock = acquireReadLock();
    try
    {
      return _event.maxTimeLag;
    }
    finally
    {
      releaseLock(readLock);
    }
  }

  /* If EspressoRelay, we would like to do the following, but we need to keep backward compatibility */

//  @Override
//  public long getTimestampMinScnEvent()
//  {
//    Lock readLock = acquireReadLock();
//    long result = 0;
//    try
//    {
//      result = _event.timestampMinScnEvent; // Timestamp of oldest event amongst all buffers
//    }
//    finally
//    {
//      releaseLock(readLock);
//    }
//    return result;
//  }
//
//  @Override
//  public long getTimestampMaxScnEvent()
//  {
//    Lock readLock = acquireReadLock();
//    long result = 0;
//    try
//    {
//      result = _event.timestampMaxScnEvent; // Timestamp of newest event amongst all buffers
//    }
//    finally
//    {
//      releaseLock(readLock);
//    }
//    return result;
//  }

  @Override
  protected void doMergeStats(Object eventData)
  {
    if (! (eventData instanceof DbusEventsTotalStatsEvent))
    {
      _log.warn("Attempt to merge unknown event class" + eventData.getClass().getName());
      return;
    }
    DbusEventsTotalStatsEvent e = (DbusEventsTotalStatsEvent)eventData;

    /** Allow use negative relay IDs for aggregation across multiple relays */
    if (_event.ownerId > 0 && e.ownerId != _event.ownerId)
    {
      _log.warn("Attempt to data for a different relay " + e.ownerId);
      return;
    }

    _event.numDataEvents += e.numDataEvents;
    _event.sizeDataEvents += e.sizeDataEvents;
    _event.sizeDataEventsPayload += e.sizeDataEventsPayload;
    _event.numDataEventsFiltered += e.numDataEventsFiltered;
    _event.sizeDataEventsFiltered += e.sizeDataEventsFiltered;
    _event.sizeDataEventsPayloadFiltered += e.sizeDataEventsPayloadFiltered;
    _event.maxSeenWinScn = maxValue(_event.maxSeenWinScn, e.maxSeenWinScn);
    _event.minSeenWinScn = minValue(_event.minSeenWinScn, e.minSeenWinScn);
    _event.numSysEvents += e.numSysEvents;
    _event.sizeSysEvents += e.sizeSysEvents;
    _event.numErrHeader += e.numErrHeader;
    _event.numErrPayload += e.numErrPayload;
    _event.numInvalidEvents += e.numInvalidEvents;
    _event.timestampAccessed = Math.max(_event.timestampAccessed,e.timestampAccessed);
    _event.timestampCreated = Math.min(_event.timestampCreated,e.timestampCreated);
    _event.sinceWinScn = e.sinceWinScn > 0 ? Math.min(_event.sinceWinScn, e.sinceWinScn) : _event.sinceWinScn;
    _event.minWinScn = e.minWinScn > 0 ? Math.min(_event.minWinScn,e.minWinScn): _event.minWinScn;
    _event.maxWinScn = Math.max(_event.maxWinScn,e.maxWinScn);
    _event.maxFilteredWinScn = Math.max(_event.maxFilteredWinScn, e.maxFilteredWinScn);
    _event.timestampMaxScnEvent = Math.max(_event.timestampMaxScnEvent, e.timestampMaxScnEvent);
    _event.timestampMinScnEvent = e.timestampMinScnEvent > 0 ? Math.min(_event.timestampMinScnEvent, e.timestampMinScnEvent): _event.timestampMinScnEvent;
    _event.numFreeBytes = (_event.numFreeBytes > 0) ?  Math.min(_event.numFreeBytes, e.numFreeBytes) : e.numFreeBytes;
    _event.latencyEvent += e.latencyEvent;
    // numPeers cannot be merged

    if(e.timestampMaxScnEvent > 0 && e.timestampMinScnEvent > 0) { // only if these are valid timestamps
      long msecs = e.timestampMaxScnEvent - e.timestampMinScnEvent;
      _event.minTimeSpan = minValue(msecs, _event.minTimeSpan);
      _event.maxTimeSpan = maxValue(msecs, _event.maxTimeSpan);
    }

    _event.minTimestampAccessed = minValue(e.timestampAccessed, _event.minTimestampAccessed);
    _event.maxTimestampAccessed = maxValue(e.timestampAccessed, _event.maxTimestampAccessed);

    _event.minTimestampMaxScnEvent = minValue(e.timestampMaxScnEvent, _event.minTimestampMaxScnEvent);
    _event.maxTimestampMaxScnEvent = maxValue(e.timestampMaxScnEvent, _event.maxTimestampMaxScnEvent);

    _event.minTimeLag = minValue(e.timeLag, _event.minTimeLag);
    _event.maxTimeLag = maxValue(e.timeLag, _event.maxTimeLag);
  }

  /* If EspressoRelay, we would like to do the following, but we need to keep backward compat. */

//  @Override
//  public long getTimeSinceLastAccess()
//  {
//    return getMinTimeSinceLastAccess(); // Most recent access amongst all buffers
//  }
//
//  @Override
//  public long getTimeSpan()
//  {
//    return 0L;
//  }
//
//  @Override
//  public long getTimeSinceLastEvent()
//  {
//    return getMinTimeSinceLastEvent();  // Most recent event written or read from all the buffers.
//  }
//
//  @Override
//  public long getPrevScn()
//  {
//    return 0L;
//  }
//
//  @Override
//  public long getMaxScn()
//  {
//    return 0L;
//  }
//
//  @Override
//  public long getMinScn()
//  {
//    return 0L;
//  }
//
//  @Override
//  public long getMinSeenWinScn()
//  {
//    return 0L;
//  }
//
//  @Override
//  public long getMaxFilteredWinScn()
//  {
//    return 0L;
//  }
//
//  @Override
//  public long getMaxSeenWinScn()
//  {
//    return 0L;
//  }
}
TOP

Related Classes of com.linkedin.databus.core.monitoring.mbean.AggregatedDbusEventsTotalStats

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.