package org.ovirt.engine.core.bll.executor; import java.lang.management.ManagementFactory; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; import javax.inject.Singleton; import javax.management.MBeanServer; import javax.management.ObjectName; import org.ovirt.engine.core.common.config.Config; import org.ovirt.engine.core.common.config.ConfigValues; import org.ovirt.engine.core.utils.executor.CommandController; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @Singleton public class HystrixCommandController implements CommandController, CommandControllerMXBean { private static final Logger log = LoggerFactory.getLogger(HystrixCommandController.class); private boolean monitorActions = false; private boolean monitorQueries = false; private boolean monitorVdsBroker = false; private ObjectName objectName; private MBeanServer platformMBeanServer; @PostConstruct public void registerInJMX() { if (Config.getValue(ConfigValues.HystrixMonitoringEnabled)) { try { objectName = new ObjectName("HystrixCommandController:type=" + this.getClass().getName()); platformMBeanServer = ManagementFactory.getPlatformMBeanServer(); platformMBeanServer.registerMBean(this, objectName); monitorAll(true); } catch (Exception e) { log.debug("Problem during registration of Monitoring into JMX: {}", e); throw new IllegalStateException("Problem during registration of Monitoring into JMX.", e); } } } @PreDestroy public void unregisterFromJMX() { if (Config.getValue(ConfigValues.HystrixMonitoringEnabled)) { try { platformMBeanServer.unregisterMBean(this.objectName); } catch (Exception e) { log.debug("Problem during unregistration of Monitoring into JMX: {}", e); } } } public boolean isMonitorActionsEnabled() { return monitorActions; } public boolean isMonitorQueriesEnabled() { return monitorQueries; } public boolean isMonitorVdsBrokerEnabled() { return monitorVdsBroker; } @Override public void monitorAll(boolean monitor) { monitorActions(monitor); monitorQueries(monitor); monitorVdsBroker(monitor); } @Override public void monitorActions(boolean monitor) { monitorActions = monitor; } @Override public void monitorQueries(boolean monitor) { monitorQueries = monitor; } @Override public void monitorVdsBroker(boolean monitor) { monitorVdsBroker = monitor; } }