/* (c) 2014 Open Source Geospatial Foundation - all rights reserved
* (c) 2014 Boundless
* This code is licensed under the GPL 2.0 license, available at the root
* application directory.
*/
package org.geoserver.cluster.hazelcast.web;
import java.net.InetSocketAddress;
import java.util.ArrayList;
import java.util.List;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.LoadableDetachableModel;
import org.geoserver.cluster.hazelcast.HzCluster;
import org.geoserver.web.GeoServerApplication;
import com.hazelcast.core.Cluster;
import com.hazelcast.core.HazelcastInstance;
import com.hazelcast.core.Member;
public class NodeInfoDialog extends Panel {
private static final long serialVersionUID = -6118539402031076763L;
public NodeInfoDialog(String id) {
super(id);
HazelcastInstance hz = getHazelcast();
Member m = hz.getCluster().getLocalMember();
InetSocketAddress address = m.getSocketAddress();
add(new Label("groupName", hz.getConfig().getGroupConfig().getName()));
add(new Label("ip", address.getAddress().getHostAddress()));
add(new Label("host", address.getHostName()));
add(new Label("port", String.valueOf(address.getPort())));
add(new WebMarkupContainer("cluster").add(new ListView<Member>("members",
new MembersDetachableModel()) {
private static final long serialVersionUID = 1L;
@Override
protected void populateItem(ListItem<Member> item) {
Member m = item.getModelObject();
InetSocketAddress address = m.getSocketAddress();
String ip = address.getAddress().getHostAddress();
int port = address.getPort();
String local = m.localMember() ? " (this)" : "";
item.add(new Label("label", String.format("%s:%d%s", ip, port, local)));
}
}));
}
private static class MembersDetachableModel extends LoadableDetachableModel<List<Member>> {
private static final long serialVersionUID = 1L;
@Override
protected List<Member> load() {
HazelcastInstance hz = getHazelcast();
Cluster c = hz.getCluster();
List<Member> members = new ArrayList<Member>(c.getMembers());
return members;
}
}
static HazelcastInstance getHazelcast() {
return GeoServerApplication.get().getBeanOfType(HzCluster.class).getHz();
}
}