/** * */ package com.linkedin.databus2.core.container.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.Hashtable; import javax.management.MBeanServer; import javax.management.ObjectName; import org.apache.log4j.Logger; import com.linkedin.databus.core.monitoring.mbean.AbstractMonitoringMBean; import com.linkedin.databus.core.util.JmxUtil; import com.linkedin.databus2.core.container.netty.ServerContainer; /** * @author lgao * */ public class DatabusComponentAdmin implements DatabusComponentAdminMBean { public static final String MODULE = DatabusComponentAdmin.class.getName(); public static final Logger LOG = Logger.getLogger(MODULE); public static final String JMX_DOMAIN = "com.linkedin.databus2"; private final String _componentName; private final ServerContainer _serverContainer; private final MBeanServer _mbeanServer; private final ObjectName _mbeanObjectName; /** * Constructor */ public DatabusComponentAdmin(ServerContainer serverContainer, MBeanServer mbeanServer, String componentName) { _serverContainer = serverContainer; _mbeanServer = mbeanServer; _componentName = componentName; _mbeanObjectName = createMBeanObjectName(); } /** * @see com.linkedin.databus2.core.container.monitoring.mbean.DatabusComponentAdminMBean#getStatus() */ @Override public String getStatus() { return _serverContainer.getStatus().toString(); } @Override public int getStatusCode() { return _serverContainer.getStatus().getCode(); } /** * @see com.linkedin.databus2.core.container.monitoring.mbean.DatabusComponentAdminMBean#getStatusMessage() */ @Override public String getStatusMessage() { return _serverContainer.getStatusMessage(); } /** * @see com.linkedin.databus2.core.container.monitoring.mbean.DatabusComponentAdminMBean#getContainerId() */ @Override public long getContainerId() { return _serverContainer.getContainerStaticConfig().getId(); } /** * @see com.linkedin.databus2.core.container.monitoring.mbean.DatabusComponentAdminMBean#getHttpPort() */ @Override public long getHttpPort() { return _serverContainer.getContainerStaticConfig().getHttpPort(); } /** * @see com.linkedin.databus2.core.container.monitoring.mbean.DatabusComponentAdminMBean#getComponentName() */ @Override public String getComponentName() { return _componentName; } /** * @see com.linkedin.databus2.core.container.monitoring.mbean.DatabusComponentAdminMBean#pause() */ @Override public void pause() { _serverContainer.pause(); } /** * @see com.linkedin.databus2.core.container.monitoring.mbean.DatabusComponentAdminMBean#resume() */ @Override public void resume() { _serverContainer.resume(); } /** * @see com.linkedin.databus2.core.container.monitoring.mbean.DatabusComponentAdminMBean#shutdown() */ @Override public void shutdown() { _serverContainer.awaitShutdown(); } private ObjectName createMBeanObjectName() { ObjectName jmxName = null; try { Hashtable<String, String> mbeanProps = new Hashtable<String, String>(5); mbeanProps.put("name", _componentName); mbeanProps.put("type", DatabusComponentAdmin.class.getSimpleName()); mbeanProps.put("ownerId", Long.toString(getContainerId())); jmxName = new ObjectName(AbstractMonitoringMBean.JMX_DOMAIN, mbeanProps); } catch (Exception e) { LOG.error("Error creating JMX object name", e); } return jmxName; } public void registerAsMBean() { if (null != _mbeanServer) { try { _mbeanServer.registerMBean(this, _mbeanObjectName); if (LOG.isDebugEnabled()) { LOG.debug("MBean registered " + _mbeanObjectName); } } catch (Exception e) { LOG.error("JMX registration failed", e); } } } public void unregisterAsMBeans() { if (null != _mbeanServer) { try { JmxUtil.unregisterMBeanSafely(_mbeanServer, _mbeanObjectName, LOG); if (LOG.isDebugEnabled()) { LOG.debug("MBean unregistered " + _mbeanObjectName); } } catch (Exception e) { LOG.error("JMX deregistration failed", e); } } } /* public void setComponentStatus(DatabusComponentStatus newStatus) { _status = newStatus; } public DatabusComponentStatus getComponentStatus() { return _status; } */ }