/* * Copyright 2000-2013 Enonic AS * http://www.enonic.com/license */ package com.enonic.cms.core.tools.cluster; import java.util.Collections; import java.util.List; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.elasticsearch.action.admin.cluster.node.info.NodeInfo; import org.elasticsearch.action.admin.cluster.node.info.NodesInfoRequestBuilder; import org.elasticsearch.action.admin.cluster.node.info.NodesInfoResponse; import org.elasticsearch.action.admin.cluster.state.ClusterStateResponse; import org.elasticsearch.client.Client; import org.springframework.beans.factory.annotation.Autowired; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.enonic.cms.core.search.ElasticSearchIndexServiceImpl; import com.enonic.cms.core.tools.AbstractToolController; public final class ClusterInfoController extends AbstractToolController { private Client client; private ElasticSearchIndexServiceImpl elasticSearchIndexService; public ClusterInfoController() { setEnterpriseFeature( true ); } @Override protected void doGet( final HttpServletRequest req, final HttpServletResponse res ) throws Exception { final String op = req.getParameter( "op" ); if ( "info".equals( op ) ) { final Map<String, Object> model = Maps.newHashMap(); model.put( "baseUrl", getBaseUrl( req ) ); addNodeInfoData( model ); renderView( req, res, model, "clusterInfoPage_info" ); } else { final Map<String, Object> model = Maps.newHashMap(); model.put( "baseUrl", getBaseUrl( req ) ); renderView( req, res, model, "clusterInfoPage" ); } } private void addNodeInfoData( final Map<String, Object> model ) throws Exception { final ClusterStateResponse clusterState = elasticSearchIndexService.getClusterState(); final String masterNodeId = clusterState.getState().nodes().masterNodeId(); final NodesInfoRequestBuilder builder = new NodesInfoRequestBuilder( this.client.admin().cluster() ); builder.setJvm( true ); final NodesInfoResponse res = builder.execute().actionGet(); model.put( "clusterName", res.getClusterName().value() ); model.put( "nodeList", toWrapper( res.getNodes(), masterNodeId ) ); } private List<ClusterNodeWrapper> toWrapper( final NodeInfo[] list, final String masterNodeId ) { final List<ClusterNodeWrapper> result = Lists.newLinkedList(); for ( final NodeInfo info : list ) { result.add( new ClusterNodeWrapper( info, ( info.getNode().getId() ).equals( masterNodeId ) ) ); } Collections.sort( result ); return result; } @Autowired public void setClient( final Client client ) { this.client = client; } @Autowired public void setElasticSearchIndexService( final ElasticSearchIndexServiceImpl elasticSearchIndexService ) { this.elasticSearchIndexService = elasticSearchIndexService; } }