/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package com.vmware.springsource.hyperic.plugin.gemfire; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.management.MBeanServerConnection; import javax.management.ObjectName; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.hyperic.hq.product.PluginException; /** * * @author laullon */ public class GemFireUtils { static Log log = LogFactory.getLog(GemFireUtils.class); private static final Map<String, String> membersIDCache = new HashMap(); public static List<String> getMembers(MBeanServerConnection mServer) throws PluginException { String[] members; Object[] args = new Object[0]; String[] def = new String[0]; try { members = (String[]) mServer.invoke(new ObjectName("GemFire:type=MemberInfoWithStatsMBean"), "getMembers", args, def); } catch (Exception ex) { throw new PluginException(ex.getMessage(), ex); } return Arrays.asList(members); } public static Map<String, Object> getMemberDetails(String memberID, MBeanServerConnection mServer) throws PluginException { Map<String, Object> memberDetails = null; try { Object[] args2 = {memberID}; String[] def2 = {String.class.getName()}; memberDetails = (Map) mServer.invoke(new ObjectName("GemFire:type=MemberInfoWithStatsMBean"), "getMemberDetails", args2, def2); } catch (Exception ex) { throw new PluginException(ex.getMessage(), ex); } if ((memberDetails == null) || memberDetails.isEmpty()) { String msg = "Member '" + memberID + "' not found!!!"; if (log.isDebugEnabled()) { log.debug("[getMemberDetails] " + msg); } throw new PluginException(msg); } return memberDetails; } public static void clearNameCache() { membersIDCache.clear(); } public static String memberNameToMemberID(String memberName, MBeanServerConnection mServer) throws PluginException { if (membersIDCache.isEmpty()) { synchronized (membersIDCache) { membersIDCache.clear(); List<String> members = GemFireUtils.getMembers(mServer); for (String member : members) { Map<String, Object> memberDetails = getMemberDetails(member, mServer); membersIDCache.put((String) memberDetails.get("gemfire.member.name.string"), member); } } log.debug("[memberNameToMemberID] membersIDCache.size() => " + membersIDCache.size()); } String memberID = membersIDCache.get(memberName); if (memberID == null) { String msg = "Member named '" + memberName + "' not found!!!"; if (log.isDebugEnabled()) { log.debug("[memberNameToMemberID] " + msg); } throw new PluginException(msg); } log.debug("[memberNameToMemberID] " + memberName + "=" + memberID); return memberID; } }