Package com.linkedin.helix.monitoring.mbeans

Source Code of com.linkedin.helix.monitoring.mbeans.HelixMessageQueueMonitor

package com.linkedin.helix.monitoring.mbeans;

import java.lang.management.ManagementFactory;

import javax.management.MBeanServer;
import javax.management.ObjectName;

import org.apache.log4j.Logger;

import com.linkedin.helix.monitoring.StatCollector;

public class HelixMessageQueueMonitor implements HelixMessageQueueMonitorMBean
{
  private static final Logger LOG = Logger.getLogger(HelixMessageQueueMonitor.class);

  private final StatCollector _messageQueueSize;
  private final MBeanServer _beanServer;
  private final String _clusterName;
  private ObjectName _objectName;

  public HelixMessageQueueMonitor(String clusterName)
  {
    _clusterName = clusterName;
    _messageQueueSize = new StatCollector();
    _beanServer = ManagementFactory.getPlatformMBeanServer();
    try
    {
      _objectName = new ObjectName("HelixMessageQueueMonitor: cluster=" + _clusterName);
      register(this, _objectName);
    }
    catch (Exception e)
    {
      LOG.error("Couldn't register " + _objectName + " mbean", e);
      // throw e;
    }
  }

  private void register(Object bean, ObjectName name) throws Exception
  {
    try
    {
      _beanServer.unregisterMBean(name);
    }
    catch (Exception e)
    {
      // OK
    }

    _beanServer.registerMBean(bean, name);
  }

  private void unregister(ObjectName name)
  {
    try
    {
      if (_beanServer.isRegistered(name))
      {
        _beanServer.unregisterMBean(name);
      }
    }
    catch (Exception e)
    {
      LOG.error("Couldn't unregister " + _objectName + " mbean", e);
    }
  }

  public void addMessageQueueSize(long size)
  {
    _messageQueueSize.addData(size);
  }

  public void reset()
  {
    _messageQueueSize.reset();
    unregister(_objectName);
  }

  @Override
  public double getMaxMessageQueueSize()
  {
    return _messageQueueSize.getMax();
  }

  @Override
  public double getMeanMessageQueueSize()
  {
    return _messageQueueSize.getMean();
  }

}
TOP

Related Classes of com.linkedin.helix.monitoring.mbeans.HelixMessageQueueMonitor

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.