package com.vmware.springsource.hyperic.plugin.gemfire.collectors;
import com.vmware.springsource.hyperic.plugin.gemfire.GemFireLiveData;
import com.vmware.springsource.hyperic.plugin.gemfire.GemFireUtils;
import com.vmware.springsource.hyperic.plugin.gemfire.detectors.GemfirePlatformDetector;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import javax.management.MBeanServerConnection;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hyperic.hq.product.Collector;
import org.hyperic.hq.product.PluginException;
import org.hyperic.hq.product.jmx.MxUtil;
public class GemfireCollector extends Collector {
static Log log = LogFactory.getLog(GemfireCollector.class);
String last_signature = "";
@Override
protected void init() throws PluginException {
Properties props = getProperties();
log.debug("[init] props=" + props);
super.init();
}
@Override
public void collect() {
int a = 0;
int c = 0;
int g = 0;
Properties props = getProperties();
try {
MBeanServerConnection mServer = MxUtil.getMBeanServer(props);
String id=GemFireLiveData.getSystemID(mServer);
List<String> members=GemFireUtils.getMembers(mServer);
String signature = Arrays.asList(members).toString();
if (!signature.equals(last_signature)) {
last_signature=signature;
GemfirePlatformDetector.runAutoDiscovery(id);
GemFireUtils.clearNameCache();
}
for (String memberID : members) {
Map memberDetails = GemFireUtils.getMemberDetails(memberID, mServer);
if ("true".equalsIgnoreCase(memberDetails.get("gemfire.member.isgateway.boolean").toString())) {
++g;
} else if ("true".equalsIgnoreCase(memberDetails.get("gemfire.member.isserver.boolean").toString())) {
++c;
} else {
++a;
}
}
setAvailability(true);
setValue("n_gateways", new Double(g).doubleValue());
setValue("n_apps", new Double(a).doubleValue());
setValue("n_caches", new Double(c).doubleValue());
} catch (Exception ex) {
setAvailability(false);
log.debug("[collect] "+ex.getMessage(), ex);
}
}
}