package ee.telekom.workflow.web.console; import java.lang.invoke.MethodHandles; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Set; import java.util.TreeMap; import javax.management.MBeanAttributeInfo; import javax.management.MBeanInfo; import javax.management.MBeanServer; import javax.management.ObjectName; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import ee.telekom.workflow.web.console.model.MbeanAttributeModel; @Controller @RequestMapping("/console") public class StatusController{ private static final Logger log = LoggerFactory.getLogger( MethodHandles.lookup().lookupClass() ); @Autowired private MBeanServer mbeanServer; @RequestMapping("/status") public String viewEngineStatus( Model model ){ try{ Map<String, List<MbeanAttributeModel>> mbeans = new TreeMap<>(); appendMbeanInformation( mbeans, "ee.telekom.workflowengine:*" ); appendMbeanInformation( mbeans, "com.hazelcast:*" ); model.addAttribute( "mbeans", mbeans ); } catch( Exception e ){ log.error( "MBeans querying failed", e ); model.addAttribute( "error", "MBeans querying failed" ); } return "console/status"; } private void appendMbeanInformation( Map<String, List<MbeanAttributeModel>> mbeans, String selector ) throws Exception{ Set<ObjectName> foundObjectNames = mbeanServer.queryNames( new ObjectName( selector ), null ); for( ObjectName objectName : foundObjectNames ){ MBeanInfo mbeanInfo = mbeanServer.getMBeanInfo( objectName ); String name = objectName.getKeyProperty( "name" ); if( name == null ){ name = mbeanInfo.getDescription(); } List<MbeanAttributeModel> attributes = new ArrayList<>(); mbeans.put( name, attributes ); for( MBeanAttributeInfo attributeInfo : mbeanInfo.getAttributes() ){ MbeanAttributeModel attribute = new MbeanAttributeModel(); attribute.setName( attributeInfo.getName() ); attribute.setDescription( attributeInfo.getDescription() ); attribute.setValue( mbeanServer.getAttribute( objectName, attribute.getName() ) ); attributes.add( attribute ); } } } }