All Downloads are FREE. Search and download functionalities are using the official Maven repository.

ee.telekom.workflow.jmx.ClusterMonitor Maven / Gradle / Ivy

Go to download

Telekom-workflow-engine core provides the runtime environment for workflow execution together with all the supporting services (clustering, persistence, error handling etc).

There is a newer version: 1.6.3
Show newest version
package ee.telekom.workflow.jmx;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Iterator;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jmx.export.annotation.ManagedAttribute;
import org.springframework.jmx.export.annotation.ManagedResource;
import org.springframework.stereotype.Component;

import ee.telekom.workflow.core.common.WorkflowEngineConfiguration;
import ee.telekom.workflow.core.lock.LockService;
import ee.telekom.workflow.core.node.Node;
import ee.telekom.workflow.core.node.NodeService;

@Component(ClusterMonitor.BEAN)
@ManagedResource
public class ClusterMonitor{

    // The bean's name is used to reference the bean in an XML application context file.
    // Therefore, we explicitly set the bean name to a constant.
    public static final String BEAN = "clusterMonitor";

    @Autowired
    private WorkflowEngineConfiguration config;
    @Autowired
    private LockService lockService;
    @Autowired
    private NodeService nodeService;

    @ManagedAttribute(description = "Is master node")
    public boolean isMasterNode(){
        return lockService.isOwnLock();
    }

    @ManagedAttribute(description = "Master node name")
    public String getMasterNodeName(){
        String lockOwner = lockService.getLockOwner();
        return lockOwner == null ? "null" : lockOwner;
    }

    @ManagedAttribute(description = "Master lock expiration date")
    public String getMasterLockExpireDate(){
        return formatDate( lockService.getLockExpireDate() );
    }

    @ManagedAttribute(description = "Node status")
    public String getNodeStatus(){
        return nodeService.findOrCreateByName( config.getNodeName() ).getStatus().name();
    }

    @ManagedAttribute(description = "List of all cluster nodes")
    public String getAllClusterNodes(){
        StringBuilder sb = new StringBuilder();
        sb.append( "cluster=" + config.getClusterName() + ", nodes={" );
        for( Iterator it = nodeService.findAllClusterNodes().iterator(); it.hasNext(); ){
            Node node = it.next();
            sb.append( "[" + node.getNodeName() + ", " + node.getStatus().name() + ", " + formatDate( node.getHeartbeat() ) + "]" );
            if( it.hasNext() ){
                sb.append( ", " );
            }
        }
        sb.append( "}" );
        return sb.toString();
    }

    private String formatDate( Date date ){
        return date == null ? "null" : new SimpleDateFormat( "dd.MM.yyyy HH:mm:ss.S" ).format( date );
    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy