You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@oodt.apache.org by ma...@apache.org on 2014/09/14 17:44:20 UTC

svn commit: r1624863 - in /oodt/trunk: ./ resource/src/main/java/org/apache/oodt/cas/resource/monitor/ resource/src/main/java/org/apache/oodt/cas/resource/monitor/exceptions/ resource/src/main/java/org/apache/oodt/cas/resource/monitor/ganglia/ resource...

Author: mattmann
Date: Sun Sep 14 15:44:19 2014
New Revision: 1624863

URL: http://svn.apache.org/r1624863
Log:
- fix for OODT-669 Make Resource Manager work without Ganglia

Added:
    oodt/trunk/resource/src/main/java/org/apache/oodt/cas/resource/monitor/utils/
      - copied from r1623586, oodt/trunk/resource/src/test/org/apache/oodt/cas/resource/monitor/utils/
Removed:
    oodt/trunk/resource/src/main/java/org/apache/oodt/cas/resource/monitor/ResourceMonitor.java
    oodt/trunk/resource/src/main/java/org/apache/oodt/cas/resource/monitor/ResourceMonitorFactory.java
    oodt/trunk/resource/src/main/java/org/apache/oodt/cas/resource/monitor/exceptions/
    oodt/trunk/resource/src/test/org/apache/oodt/cas/resource/monitor/utils/
    oodt/trunk/resource/src/testdata/resourcemon/nodes.xml
Modified:
    oodt/trunk/CHANGES.txt
    oodt/trunk/resource/src/main/java/org/apache/oodt/cas/resource/monitor/AssignmentMonitor.java
    oodt/trunk/resource/src/main/java/org/apache/oodt/cas/resource/monitor/AssignmentMonitorFactory.java
    oodt/trunk/resource/src/main/java/org/apache/oodt/cas/resource/monitor/ganglia/GangliaAdapter.java
    oodt/trunk/resource/src/main/java/org/apache/oodt/cas/resource/monitor/ganglia/GangliaMetKeys.java
    oodt/trunk/resource/src/main/java/org/apache/oodt/cas/resource/monitor/ganglia/GangliaResourceMonitor.java
    oodt/trunk/resource/src/main/java/org/apache/oodt/cas/resource/monitor/ganglia/GangliaResourceMonitorFactory.java
    oodt/trunk/resource/src/main/java/org/apache/oodt/cas/resource/monitor/ganglia/loadcalc/LoadCalculator.java
    oodt/trunk/resource/src/main/java/org/apache/oodt/cas/resource/monitor/ganglia/loadcalc/WeightedAverageLoadCalc.java
    oodt/trunk/resource/src/main/java/org/apache/oodt/cas/resource/monitor/utils/MockGmetad.java
    oodt/trunk/resource/src/main/java/org/apache/oodt/cas/resource/util/GenericResourceManagerObjectFactory.java
    oodt/trunk/resource/src/test/org/apache/oodt/cas/resource/monitor/TestAssignmentMonitor.java
    oodt/trunk/resource/src/test/org/apache/oodt/cas/resource/monitor/TestGangliaResourceMonitor.java
    oodt/trunk/resource/src/test/org/apache/oodt/cas/resource/monitor/TestGangliaXMLParser.java
    oodt/trunk/resource/src/testdata/policy/nodes.xml
    oodt/trunk/resource/src/testdata/test.resource.properties

Modified: oodt/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/oodt/trunk/CHANGES.txt?rev=1624863&r1=1624862&r2=1624863&view=diff
==============================================================================
--- oodt/trunk/CHANGES.txt (original)
+++ oodt/trunk/CHANGES.txt Sun Sep 14 15:44:19 2014
@@ -4,6 +4,8 @@ Apache OODT Change Log
 Release 0.7 - Current Development
 -------------------------------------------- 
 
+* OODT-669 Make Resource Manager work without Ganglia (mattmann, rajith)
+
 * OODT-644 Fix to FTP protocol tests, abstracting some of the logic to make the code better suited to mocking(magicaltrout)
 
 * OODT-644 Fix to stub FTP client protocol so it doesn't fail when the port is in use

Modified: oodt/trunk/resource/src/main/java/org/apache/oodt/cas/resource/monitor/AssignmentMonitor.java
URL: http://svn.apache.org/viewvc/oodt/trunk/resource/src/main/java/org/apache/oodt/cas/resource/monitor/AssignmentMonitor.java?rev=1624863&r1=1624862&r2=1624863&view=diff
==============================================================================
--- oodt/trunk/resource/src/main/java/org/apache/oodt/cas/resource/monitor/AssignmentMonitor.java (original)
+++ oodt/trunk/resource/src/main/java/org/apache/oodt/cas/resource/monitor/AssignmentMonitor.java Sun Sep 14 15:44:19 2014
@@ -15,7 +15,6 @@
  * limitations under the License.
  */
 
-
 package org.apache.oodt.cas.resource.monitor;
 
 //JDK imports
@@ -23,19 +22,18 @@ import java.net.URL;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Vector;
-import java.util.logging.Logger;
 
 //OODT imports
 import org.apache.oodt.cas.resource.structs.ResourceNode;
 import org.apache.oodt.cas.resource.structs.exceptions.MonitorException;
 
 /**
- *
+ * 
  * @author woollard
  * @author bfoster
- * @author rajith
+ * @author mattmann
  * @version $Revision$
- *
+ * 
  * <p>
  * An implementation of the {@link Monitor} interface that loads its information
  * about the underlying nodes from an XML file called <code>nodes.xml</code>.
@@ -44,23 +42,20 @@ import org.apache.oodt.cas.resource.stru
  * </p>
  */
 public class AssignmentMonitor implements Monitor {
-
-    /* our log stream */
-    private static Logger LOG = Logger.getLogger(AssignmentMonitor.class
-            .getName());
-
+	
     /* our nodes map */
     private static HashMap<String, ResourceNode> nodesMap;
 
-    /* resource monitor */
-    private ResourceMonitor resourceMonitor;
+    /* our load map */
+    private static HashMap<String, Integer> loadMap;
 
-    public AssignmentMonitor(List<ResourceNode> nodes, ResourceMonitor resourceMonitor) {
+    public AssignmentMonitor(List<ResourceNode> nodes) {
         nodesMap = new HashMap<String, ResourceNode>();
-        this.resourceMonitor = resourceMonitor;
-
+        loadMap = new HashMap<String, Integer>();
+        
         for (ResourceNode node : nodes) {
             nodesMap.put(node.getNodeId(), node);
+            loadMap.put(node.getNodeId(), new Integer(0));
         }
     }
 
@@ -70,27 +65,30 @@ public class AssignmentMonitor implement
      * @see gov.nasa.jpl.oodt.cas.resource.monitor.Monitor#assignLoad(
      *      gov.nasa.jpl.oodt.cas.resource.structs.ResourceNode, int)
      */
+    @Override
     public boolean assignLoad(ResourceNode node, int loadValue)
             throws MonitorException {
-        float loadVal = (float) loadValue;
-        float loadCap = (float) node.getCapacity();
-        float curLoad = resourceMonitor.getLoad(node);
+        int loadCap = node.getCapacity();
+        int curLoad = loadMap.get(node.getNodeId());
 
-        if (loadVal <= (loadCap - curLoad)) {
-            resourceMonitor.updateLoad(node.getNodeId(), curLoad + loadVal);
+        if (loadValue <= (loadCap - curLoad)) {
+            loadMap.remove(node.getNodeId());
+            loadMap.put(node.getNodeId(), new Integer(curLoad + loadValue));
             return true;
         } else {
             return false;
         }
     }
 
+    @Override
     public boolean reduceLoad(ResourceNode node, int loadValue)
             throws MonitorException {
-        float load = resourceMonitor.getLoad(node);
-        float newVal = load - (float)loadValue;
+        int load = loadMap.get(node.getNodeId());
+        int newVal = load - loadValue;
         if (newVal < 0)
             newVal = 0; // should not happen but just in case
-        resourceMonitor.updateLoad(node.getNodeId(), newVal);
+        loadMap.remove(node.getNodeId());
+        loadMap.put(node.getNodeId(), new Integer(newVal));
         return true;
     }
 
@@ -101,9 +99,8 @@ public class AssignmentMonitor implement
      */
     public int getLoad(ResourceNode node) throws MonitorException {
         ResourceNode resource = (ResourceNode) nodesMap.get(node.getNodeId());
-//        Integer i = (Integer) loadMap.get(node.getNodeId());
-        float load = resourceMonitor.getLoad(node);
-        return (int) ((float) resource.getCapacity() - load);
+        int i = loadMap.get(node.getNodeId());
+        return (resource.getCapacity() - i);
     }
 
     /*
@@ -143,12 +140,12 @@ public class AssignmentMonitor implement
 
     public void addNode(ResourceNode node) throws MonitorException {
         nodesMap.put(node.getNodeId(), node);
-        resourceMonitor.addNode(node.getNodeId(), node.getCapacity());
+        if (!loadMap.containsKey(node.getNodeId()))
+            loadMap.put(node.getNodeId(), new Integer(0));
     }
 
     public void removeNodeById(String nodeId) throws MonitorException {
-        nodesMap.remove(nodeId);
-        resourceMonitor.removeNodeById(nodeId);
+        nodesMap.remove(nodeId);    
+        loadMap.remove(nodeId);
     }
-
 }

Modified: oodt/trunk/resource/src/main/java/org/apache/oodt/cas/resource/monitor/AssignmentMonitorFactory.java
URL: http://svn.apache.org/viewvc/oodt/trunk/resource/src/main/java/org/apache/oodt/cas/resource/monitor/AssignmentMonitorFactory.java?rev=1624863&r1=1624862&r2=1624863&view=diff
==============================================================================
--- oodt/trunk/resource/src/main/java/org/apache/oodt/cas/resource/monitor/AssignmentMonitorFactory.java (original)
+++ oodt/trunk/resource/src/main/java/org/apache/oodt/cas/resource/monitor/AssignmentMonitorFactory.java Sun Sep 14 15:44:19 2014
@@ -19,24 +19,22 @@
 package org.apache.oodt.cas.resource.monitor;
 
 //OODT imports
-import org.apache.oodt.cas.resource.structs.ResourceNode;
+import org.apache.oodt.cas.resource.noderepo.XmlNodeRepositoryFactory;
 import org.apache.oodt.cas.resource.util.GenericResourceManagerObjectFactory;
 
 //JDK imports
-import java.util.List;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
 /**
  * @author woollard
  * @author bfoster
- * @author rajith
  * @version $Revision$
- *
+ * 
  * <p>
  * Creates implementations of {@link AssignmentMonitor}s.
  * </p>
- *
+ * 
  */
 public class AssignmentMonitorFactory implements MonitorFactory {
 
@@ -52,16 +50,11 @@ public class AssignmentMonitorFactory im
     public AssignmentMonitor createMonitor() {
         try {
             String nodeRepoFactoryStr = System.getProperty(
-                    "org.apache.oodt.cas.resource.nodes.repo.factory");
-            String resourceMonitorStr = System
-                    .getProperty("org.apache.oodt.cas.resource.monitor.factory");
-
-            List<ResourceNode> resourceNodes = GenericResourceManagerObjectFactory
-                    .getNodeRepositoryFromFactory(nodeRepoFactoryStr).loadNodes();
-            ResourceMonitor resourceMonitor = GenericResourceManagerObjectFactory
-                    .getResourceMonitorFromServiceFactory(resourceMonitorStr);
-
-            return new AssignmentMonitor(resourceNodes, resourceMonitor);
+                    "gov.nasa.jpl.oodt.cas.resource.nodes.repo.factory",
+                    XmlNodeRepositoryFactory.class.getCanonicalName());
+            return new AssignmentMonitor(GenericResourceManagerObjectFactory
+                    .getNodeRepositoryFromFactory(nodeRepoFactoryStr)
+                    .loadNodes());
         } catch (Exception e) {
             LOG.log(Level.SEVERE, "Failed to create Assignment Monitor : "
                     + e.getMessage(), e);

Modified: oodt/trunk/resource/src/main/java/org/apache/oodt/cas/resource/monitor/ganglia/GangliaAdapter.java
URL: http://svn.apache.org/viewvc/oodt/trunk/resource/src/main/java/org/apache/oodt/cas/resource/monitor/ganglia/GangliaAdapter.java?rev=1624863&r1=1624862&r2=1624863&view=diff
==============================================================================
--- oodt/trunk/resource/src/main/java/org/apache/oodt/cas/resource/monitor/ganglia/GangliaAdapter.java (original)
+++ oodt/trunk/resource/src/main/java/org/apache/oodt/cas/resource/monitor/ganglia/GangliaAdapter.java Sun Sep 14 15:44:19 2014
@@ -17,13 +17,15 @@
 
 package org.apache.oodt.cas.resource.monitor.ganglia;
 
-import org.apache.oodt.cas.resource.monitor.exceptions.GangliaMonitorException;
+//OODT imports
 import org.apache.oodt.cas.resource.monitor.ganglia.configuration.Cluster;
 import org.apache.oodt.cas.resource.monitor.ganglia.configuration.Host;
 import org.apache.oodt.cas.resource.monitor.ganglia.configuration.Metric;
+import org.apache.oodt.cas.resource.structs.exceptions.MonitorException;
+
+//JDK imports
 import org.xml.sax.InputSource;
 import org.xml.sax.SAXException;
-
 import javax.xml.parsers.ParserConfigurationException;
 import javax.xml.parsers.SAXParserFactory;
 import java.io.BufferedReader;
@@ -34,65 +36,81 @@ import java.net.Socket;
 import java.net.UnknownHostException;
 import java.util.HashMap;
 import java.util.List;
-import java.util.Set;
+import java.util.Map;
 
 /**
  * @author rajith
+ * @author mattmann
  * @version $Revision$
  */
 public class GangliaAdapter {
 
-    private static String ENCODING = "ISO-8859-1";
+    private static final String ENCODING = "ISO-8859-1";
 
+    private String host;
+    
+    private int port;
+    
+    
+    public GangliaAdapter(String host, int port){
+       	this.host = host;
+       	this.port = port;
+    }
+
+    protected GangliaAdapter(){
+    	this(null, -9999);
+    }
+    
     /**
      * Get resource nodes' status.
-     * @return List that contains status of resource nodes
-     * @throws org.apache.oodt.cas.resource.monitor.exceptions.GangliaMonitorException {@link org.apache.oodt.cas.resource.monitor.exceptions.GangliaMonitorException} if an error occurred.
+     * @return Map that contains status of resource nodes
+     * @throws org.apache.oodt.cas.resource.monitor.exceptions.MonitorException if an error occurred.
      */
-    public static HashMap<String, HashMap> getResourceNodeStatus(Set requiredNodes)
-            throws GangliaMonitorException {
-        String host = System
-                .getProperty("org.apache.oodt.cas.resource.monitor.ganglia.gemtad.host.address");
-        int port = Integer.valueOf(System
-                .getProperty("org.apache.oodt.cas.resource.monitor.ganglia.gemtad.host.port"));
-
-        List<Cluster> gridStatus = parseConfiguration(readXMLDump(host, port));
-        return filterRequiredNodes(requiredNodes, gridStatus);
+    public Map<String, Map<String,String>> getResourceNodeStatus()
+            throws MonitorException {
+        List<Cluster> gridStatus = parseConfiguration(readXMLDump(this.host, this.port));
+        return filterNodes(gridStatus);
+    }
+    
+    /**
+     * 
+     * @return A string representation of the {@link #host}:{@link #port}
+     */
+    public String getUrlString(){
+    	return this.host+":"+this.port;
     }
 
     /**
-     * Filter out the required nodes from the grid state ganglia configuration
-     * @param requiredNodes the required nodes
+     * Filter out the nodes from the grid state ganglia configuration
      * @param gridStatus Ganglia meta daemon parsed grid status
-     * @return filtered resource node HashMap
+     * @return resource node Map
      */
-    private static HashMap<String, HashMap> filterRequiredNodes (Set requiredNodes,
-                                                                 List<Cluster> gridStatus){
+    private Map<String, Map<String,String>> filterNodes (List<Cluster> gridStatus){
 
-        HashMap<String, HashMap> filteredNodes = new HashMap<String, HashMap>();
+        Map<String, Map<String,String>> nodes = new HashMap<String, Map<String,String>>();
         for (Cluster cluster : gridStatus) {
             for (Host host : cluster.getHosts()) {
-                if(requiredNodes.contains(host.getName())){
-                    HashMap<String, String> metrics = new HashMap<String, String>();
+                    Map<String, String> metrics = new HashMap<String, String>();
                     for (Metric metric : host.getMetrics()) {
                         metrics.put(metric.getName(), metric.getValue());
                     }
                     metrics.put(GangliaMetKeys.TN,host.getTn());
                     metrics.put(GangliaMetKeys.TMAX, host.getTmax());
-                    filteredNodes.put(host.getName(), metrics);
-                }
+                    metrics.put(GangliaMetKeys.IP, host.getIp());
+                    metrics.put(GangliaMetKeys.NAME, host.getName());
+                    nodes.put(host.getName(), metrics);
             }
         }
-        return filteredNodes;
+        return nodes;
     }
 
     /**
      * Get a XML dump from a ganglia meta daemon.
      * @return A String that contains all the dump
-     * @throws org.apache.oodt.cas.resource.monitor.exceptions.GangliaMonitorException {@link org.apache.oodt.cas.resource.monitor.exceptions.GangliaMonitorException}
+     * @throws org.apache.oodt.cas.resource.monitor.exceptions.MonitorException {@link org.apache.oodt.cas.resource.monitor.exceptions.MonitorException}
      * if an error occurred during the read.
      */
-    private static String readXMLDump(String host, int port) throws GangliaMonitorException {
+    private String readXMLDump(String host, int port) throws MonitorException {
         StringBuilder buffer = new StringBuilder();
 
         try {
@@ -106,10 +124,10 @@ public class GangliaAdapter {
             }
             reader.close();
         } catch (UnknownHostException e) {
-            throw new GangliaMonitorException
+            throw new MonitorException
                     ("Unknown host: " + host + ":" + port + "-" + e.getMessage());
         } catch (IOException e) {
-            throw new GangliaMonitorException
+            throw new MonitorException
                     ("Unable to get the monitoring report from the GMeta daemon: "
                             + e.getMessage());
         }
@@ -120,10 +138,10 @@ public class GangliaAdapter {
      * Parse a configuration from a XML output of a Ganglia meta daemon.
      * @param buffer the XML buffer
      * @return a Configuration
-     * @throws org.apache.oodt.cas.resource.monitor.exceptions.GangliaMonitorException {@link org.apache.oodt.cas.resource.monitor.exceptions.GangliaMonitorException} if an error occurred
+     * @throws org.apache.oodt.cas.resource.monitor.exceptions.MonitorException {@link org.apache.oodt.cas.resource.monitor.exceptions.MonitorException} if an error occurred
      */
-    private static List<Cluster> parseConfiguration(String buffer)
-            throws GangliaMonitorException {
+    private List<Cluster> parseConfiguration(String buffer)
+            throws MonitorException {
         SAXParserFactory factory = SAXParserFactory.newInstance();
         javax.xml.parsers.SAXParser parser;
         GangliaXMLParser gangliaXMLParser;
@@ -133,11 +151,11 @@ public class GangliaAdapter {
             parser.parse(new InputSource(new StringReader(buffer)), gangliaXMLParser);
 
         } catch (ParserConfigurationException e) {
-            throw new GangliaMonitorException("Error while parsing: " + e.getMessage());
+            throw new MonitorException("Error while parsing: " + e.getMessage());
         } catch (SAXException e) {
-            throw new GangliaMonitorException("Error while parsing the XML: " + e.getMessage());
+            throw new MonitorException("Error while parsing the XML: " + e.getMessage());
         } catch (IOException e) {
-            throw new GangliaMonitorException("I/O error: " + e.getMessage());
+            throw new MonitorException("I/O error: " + e.getMessage());
         }
         return gangliaXMLParser.getGridConfiguration();
     }

Modified: oodt/trunk/resource/src/main/java/org/apache/oodt/cas/resource/monitor/ganglia/GangliaMetKeys.java
URL: http://svn.apache.org/viewvc/oodt/trunk/resource/src/main/java/org/apache/oodt/cas/resource/monitor/ganglia/GangliaMetKeys.java?rev=1624863&r1=1624862&r2=1624863&view=diff
==============================================================================
--- oodt/trunk/resource/src/main/java/org/apache/oodt/cas/resource/monitor/ganglia/GangliaMetKeys.java (original)
+++ oodt/trunk/resource/src/main/java/org/apache/oodt/cas/resource/monitor/ganglia/GangliaMetKeys.java Sun Sep 14 15:44:19 2014
@@ -23,6 +23,7 @@ package org.apache.oodt.cas.resource.mon
  */
 public interface GangliaMetKeys {
 
+	/* XML specific keys */
     public static final String CLUSTER = "CLUSTER";
     public static final String HOST = "HOST";
     public static final String METRIC = "METRIC";
@@ -54,6 +55,16 @@ public interface GangliaMetKeys {
     public static final String OWNER = "OWNER";
     public static final String LATLONG = "LATLONG";
     public static final String URL = "URL";
+    
+    /*Ganglia metric keys*/
+    public static String LOAD_ONE = "load_one";
+    public static String LOAD_FIVE = "load_five";
+    public static String LOAD_FIFTEEN = "load_fifteen";
+    public static String CPU_NUM = "cpu_num";
+
+    /* Various needed keys */
+    public static int MAXIMUM_FRACTION_DIGITS = 3;
+
 
 
 }

Modified: oodt/trunk/resource/src/main/java/org/apache/oodt/cas/resource/monitor/ganglia/GangliaResourceMonitor.java
URL: http://svn.apache.org/viewvc/oodt/trunk/resource/src/main/java/org/apache/oodt/cas/resource/monitor/ganglia/GangliaResourceMonitor.java?rev=1624863&r1=1624862&r2=1624863&view=diff
==============================================================================
--- oodt/trunk/resource/src/main/java/org/apache/oodt/cas/resource/monitor/ganglia/GangliaResourceMonitor.java (original)
+++ oodt/trunk/resource/src/main/java/org/apache/oodt/cas/resource/monitor/ganglia/GangliaResourceMonitor.java Sun Sep 14 15:44:19 2014
@@ -17,113 +17,258 @@
 
 package org.apache.oodt.cas.resource.monitor.ganglia;
 
-import org.apache.oodt.cas.resource.monitor.ResourceMonitor;
-import org.apache.oodt.cas.resource.monitor.exceptions.GangliaMonitorException;
+//OODT imports
+import org.apache.oodt.cas.resource.monitor.Monitor;
 import org.apache.oodt.cas.resource.monitor.ganglia.loadcalc.LoadCalculator;
 import org.apache.oodt.cas.resource.structs.ResourceNode;
+import org.apache.oodt.cas.resource.structs.exceptions.MonitorException;
+import static org.apache.oodt.cas.resource.monitor.ganglia.GangliaMetKeys.NAME;
 
+//JDK imports
+import java.net.MalformedURLException;
+import java.net.URL;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Vector;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
 /**
  * @author rajith
+ * @author mattmann
  * @version $Revision$
  */
-public class GangliaResourceMonitor implements ResourceMonitor {
+public class GangliaResourceMonitor implements Monitor {
 
-    private static final Logger LOG = Logger.getLogger(GangliaResourceMonitor.class.getName());
-
-    /*loadMap will be updated after a UPDATE_INTERVAL milliseconds interval*/
-    private static long UPDATE_INTERVAL = 60000;
-
-    private static HashMap<String, Float> nodeCapacityMap = new HashMap<String, Float>();
-    private static HashMap<String, Float> loadMap = new HashMap<String, Float>();
-
-    private LoadCalculator loadCalculator;
-    private long lastUpdatedTime;
-
-    /**
-     * Make a new GangliaResourceMonitor that reads information
-     * from a ganglia meta daemon.
-     * @param loadCalculator LoadCalculator {@link org.apache.oodt.cas.resource.monitor.ganglia.loadcalc.LoadCalculator} to calculate load
-     * @param nodes resource nodes {@link org.apache.oodt.cas.resource.structs.ResourceNode} to be monitored.
-     */
-    public GangliaResourceMonitor(LoadCalculator loadCalculator, List<ResourceNode> nodes){
-        this.loadCalculator = loadCalculator;
-
-        for (ResourceNode node : nodes) {
-            nodeCapacityMap.put(node.getNodeId(), (float) node.getCapacity());
-        }
-        // Initially set the value UPDATE_INTERVAL earlier.
-        lastUpdatedTime = System.currentTimeMillis() - UPDATE_INTERVAL;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public float getLoad(ResourceNode node) {
-        try {
-            if(lastUpdatedTime + UPDATE_INTERVAL <= (System.currentTimeMillis())){
-                updateLoadMap();
-            }
-            return loadMap.get(node.getNodeId());
-        } catch (GangliaMonitorException e) {
-            LOG.log(Level.SEVERE, "Failed get status from the Ganglia meta daemon : "
-                    + e.getMessage(), e);
-            return nodeCapacityMap.get(node.getNodeId()); //return the capacity as the load of the node
-        } catch (NullPointerException e){
-            LOG.log(Level.SEVERE, "The required nodeId is not available: "
-                    + node.getNodeId() + " :" + e.getMessage(), e);
-            return (float) node.getCapacity(); //return node's if the nodeId is not available.
-        } catch (Exception e){
-            LOG.log(Level.SEVERE, "Failed get status from the Ganglia meta daemon for the nodeId: "
-                    + node.getNodeId() + " :" + e.getMessage(), e);
-            return nodeCapacityMap.get(node.getNodeId()); //return the capacity as the load of the node
-        }
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void updateLoad(String nodeId, float loadValue) {
-        loadMap.put(nodeId, loadValue);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void addNode(String nodeId, float capacity) {
-        nodeCapacityMap.put(nodeId, capacity);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void removeNodeById(String nodeId) {
-        nodeCapacityMap.remove(nodeId);
-        loadMap.remove(nodeId);
-    }
-
-    /**
-     * Update the loadMap by calculating the load by the LoadCalculator
-     * @throws org.apache.oodt.cas.resource.monitor.exceptions.GangliaMonitorException {@link org.apache.oodt.cas.resource.monitor.exceptions.GangliaMonitorException} if an error occurred
-     */
-    private void updateLoadMap() throws GangliaMonitorException {
-        lastUpdatedTime = System.currentTimeMillis();
-        HashMap<String, HashMap> resourceNodesMetrics = GangliaAdapter
-                .getResourceNodeStatus(nodeCapacityMap.keySet());
-
-        for (Map.Entry<String, HashMap> entry: resourceNodesMetrics.entrySet()){
-            loadMap.put(entry.getKey(), loadCalculator.calculateLoad(
-                    nodeCapacityMap.get(entry.getKey()), resourceNodesMetrics.get(entry.getKey())));
-        }
-    }
+	private static final Logger LOG = Logger
+			.getLogger(GangliaResourceMonitor.class.getName());
+	private LoadCalculator loadCalculator;
+	private Map<String, Integer> loadMap;
+	private Map<String, Map<String, String>> gmetaNodes;
+	private Map<String, GangliaAdapter> gmetaAdapters;
+	private static final int DEFAULT_PORT = 8649;
+
+	/**
+	 * Make a new GangliaResourceMonitor that reads information from a ganglia
+	 * meta daemon.
+	 * 
+	 * @param loadCalculator
+	 *            LoadCalculator
+	 *            {@link org.apache.oodt.cas.resource.monitor.ganglia.loadcalc.LoadCalculator}
+	 *            to calculate load
+	 * @param nodes
+	 *            resource nodes
+	 *            {@link org.apache.oodt.cas.resource.structs.ResourceNode} to
+	 *            be monitored.
+	 */
+	public GangliaResourceMonitor(LoadCalculator loadCalculator,
+			String gmetadHost, int gmetadPort) {
+		this.loadCalculator = loadCalculator;
+		this.loadMap = new HashMap<String, Integer>();
+		this.gmetaNodes = new HashMap<String, Map<String, String>>();
+		this.gmetaAdapters = new HashMap<String, GangliaAdapter>();
+		try {
+			this.initGmetaNodes(gmetadHost, gmetadPort);
+		} catch (Exception e) {
+			e.printStackTrace();
+			LOG.log(Level.WARNING,
+					"URL exception initializing gmetad nodes: [" + gmetadHost
+							+ ":" + gmetadPort + "]: Message: "
+							+ e.getMessage());
+		}
+
+	}
+
+	@Override
+	public int getLoad(ResourceNode node) throws MonitorException {
+		Map<String, String> nodeProperties = null;
+		String nodeId = node.getNodeId();
+		nodeProperties = this.locateNode(nodeId);
+		if (nodeProperties == null) {
+			throw new MonitorException(
+					"GangliaMonitor: not tracking requested node: [" + nodeId
+							+ "]");
+		}
+
+		// calculate load
+		double calcLoad = this.loadCalculator.calculateLoad(nodeProperties);
+		System.out.println(calcLoad);
+		int load = new Long(Math.round(calcLoad)).intValue();
+		System.out.println("LOAD is: "+load);
+		return load;
+	}
+
+	@Override
+	public boolean assignLoad(ResourceNode node, int loadValue)
+			throws MonitorException {
+		// technically this method should simply do nothing, since
+		// putting a job onto a node should cause Ganglia to detect
+		// for now we'll simply track what the current perceived load
+		// on a node is - we may want to factor this into the weighting
+		// in load calculator later
+		String nodeId = node.getNodeId();
+		if (loadMap.containsKey(nodeId)) {
+			int currLoad = loadMap.get(nodeId);
+			currLoad += loadValue;
+			loadMap.put(nodeId, currLoad);
+		} else {
+			loadMap.put(nodeId, loadValue);
+		}
+		return true;
+	}
+
+	@Override
+	public void addNode(ResourceNode node) {
+		this.addGmetadNode(node.getIpAddr().getHost(), node.getIpAddr()
+				.getPort());
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public void removeNodeById(String nodeId) {
+		this.removeGmetadNode(nodeId);
+	}
+
+	@Override
+	public List getNodes() throws MonitorException {
+		List<ResourceNode> nodes = new Vector<ResourceNode>();
+		if (this.gmetaAdapters != null) {
+			for (GangliaAdapter adapter : this.gmetaAdapters.values()) {
+				Map<String, Map<String, String>> aNodes = adapter
+						.getResourceNodeStatus();
+				for (Map<String, String> map : aNodes.values()) {
+					try {
+						nodes.add(this.nodeFromMap(map));
+					} catch (MalformedURLException e) {
+						e.printStackTrace();
+						throw new MonitorException(e.getMessage());
+					}
+				}
+			}
+		}
+
+		return nodes;
+	}
+
+	@Override
+	public ResourceNode getNodeById(String nodeId) throws MonitorException {
+		try {
+			return this.nodeFromMap(this.locateNode(nodeId));
+		} catch (MalformedURLException e) {
+			e.printStackTrace();
+			throw new MonitorException(e.getMessage());
+		}
+	}
+
+	@Override
+	public ResourceNode getNodeByURL(URL ipAddr) throws MonitorException {
+		if (this.gmetaAdapters != null) {
+			for (GangliaAdapter adapter : this.gmetaAdapters.values()) {
+				Map<String, Map<String, String>> aNodes = adapter
+						.getResourceNodeStatus();
+				for (String aNodeId : aNodes.keySet()) {
+					String host = ipAddr.getHost();
+					int port = ipAddr.getPort();
+					Map<String, String> nodeProps = aNodes.get(aNodeId);
+					if (aNodeId.equals(host)
+							&& nodeProps.get(DEFAULT_PORT).equals(
+									String.valueOf(port))) {
+						try {
+							return this.nodeFromMap(aNodes.get(aNodeId));
+						} catch (MalformedURLException e) {
+							e.printStackTrace();
+							throw new MonitorException(e.getMessage());
+						}
+					}
+				}
+			}
+		}
+
+		return null;
+	}
+
+	@Override
+	public boolean reduceLoad(ResourceNode node, int loadValue)
+			throws MonitorException {
+		String nodeId = node.getNodeId();
+		if (this.loadMap.containsKey(nodeId)) {
+			int currLoad = loadMap.get(nodeId);
+			currLoad = Math.min(0, currLoad - loadValue);
+			this.loadMap.put(nodeId, currLoad);
+		} else {
+			this.loadMap.put(nodeId, 0);
+		}
+		
+		return true;
+	}
+
+	private Map<String, String> locateNode(String nodeId) {
+		if (this.gmetaAdapters != null && this.gmetaAdapters.size() > 0) {
+			for (String nId : this.gmetaAdapters.keySet()) {
+				GangliaAdapter adapter = this.gmetaAdapters.get(nId);
+				try {
+					System.out.println("Querying gmetad: ["+adapter.getUrlString()+"]");
+					Map<String, Map<String, String>> nodeStatus = adapter
+							.getResourceNodeStatus();
+					System.out.println("Looking for nodeid: ["+nodeId+"]");
+					if (nodeStatus.containsKey(nodeId)) {
+						System.out.println("NODE met: "+nodeStatus.get(nodeId));
+						return nodeStatus.get(nodeId);
+					}
+				} catch (MonitorException e) {
+					LOG.log(Level.WARNING,
+							"MonitorException contacting Ganglia: ["
+									+ adapter.getUrlString() + "]");
+					e.printStackTrace();
+				}
+			}
+
+		}
+
+		return null;
+	}
+
+	private ResourceNode nodeFromMap(Map<String, String> map)
+			throws MalformedURLException {
+		if (map == null) return null;
+		ResourceNode node = new ResourceNode();
+		System.out.println("MAP IS "+map);
+		System.out.println("Setting hostname to "+map.get(NAME));
+		node.setId(map.get(NAME));
+		node.setIpAddr(new URL("http://" + map.get(NAME) + ":" + DEFAULT_PORT));
+		return node;
+	}
+
+	private void initGmetaNodes(String host, int port)
+			throws MalformedURLException {
+		this.addGmetadNode(host, port);
+	}
+
+	private GangliaAdapter createAdapter(Map<String, String> node) {
+		return new GangliaAdapter(node.get("host"), Integer.valueOf(node
+				.get("port")));
+	}
+
+	private void addGmetadNode(String host, int port) {
+		Map<String, String> rootNode = new HashMap<String, String>();
+		rootNode.put("host", host);
+		rootNode.put("port", String.valueOf(port));
+		this.gmetaNodes.put(host, rootNode);
+		this.gmetaAdapters.put(host, this.createAdapter(rootNode));
+	}
+
+	private void removeGmetadNode(String host) {
+		if (this.gmetaNodes.containsKey(host)
+				&& this.gmetaAdapters.containsKey(host)) {
+			LOG.log(Level.FINE,
+					"Removing gmetad node: ["
+							+ gmetaAdapters.get(host).getUrlString() + "]");
+			this.gmetaAdapters.remove(host);
+			this.gmetaNodes.remove(host);
+		}
+	}
 
 }

Modified: oodt/trunk/resource/src/main/java/org/apache/oodt/cas/resource/monitor/ganglia/GangliaResourceMonitorFactory.java
URL: http://svn.apache.org/viewvc/oodt/trunk/resource/src/main/java/org/apache/oodt/cas/resource/monitor/ganglia/GangliaResourceMonitorFactory.java?rev=1624863&r1=1624862&r2=1624863&view=diff
==============================================================================
--- oodt/trunk/resource/src/main/java/org/apache/oodt/cas/resource/monitor/ganglia/GangliaResourceMonitorFactory.java (original)
+++ oodt/trunk/resource/src/main/java/org/apache/oodt/cas/resource/monitor/ganglia/GangliaResourceMonitorFactory.java Sun Sep 14 15:44:19 2014
@@ -17,44 +17,52 @@
 
 package org.apache.oodt.cas.resource.monitor.ganglia;
 
-import org.apache.oodt.cas.resource.monitor.ResourceMonitor;
-import org.apache.oodt.cas.resource.monitor.ResourceMonitorFactory;
-import org.apache.oodt.cas.resource.monitor.ganglia.loadcalc.LoadCalculator;
-import org.apache.oodt.cas.resource.structs.ResourceNode;
-import org.apache.oodt.cas.resource.util.GenericResourceManagerObjectFactory;
-
+//JDK imports
 import java.util.List;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
+
+
+//OODT imports
+import org.apache.oodt.cas.resource.monitor.Monitor;
+import org.apache.oodt.cas.resource.monitor.MonitorFactory;
+import org.apache.oodt.cas.resource.monitor.ganglia.loadcalc.LoadCalculator;
+import org.apache.oodt.cas.resource.structs.ResourceNode;
+import org.apache.oodt.cas.resource.util.GenericResourceManagerObjectFactory;
+
 /**
  * @author rajith
  * @version $Revision$
  */
-public class GangliaResourceMonitorFactory implements ResourceMonitorFactory {
+public class GangliaResourceMonitorFactory implements MonitorFactory {
+
+	private static final Logger LOG = Logger
+			.getLogger(GangliaResourceMonitorFactory.class.getName());
 
-    private static final Logger LOG = Logger.getLogger(GangliaResourceMonitorFactory.class.getName());
+	@Override
+	public Monitor createMonitor() {
+		try {
+			String loadCalculatorFactoryStr = System
+					.getProperty("org.apache.oodt.cas.resource.monitor.loadcalc.factory");
+			String nodeRepoFactoryStr = System
+					.getProperty("org.apache.oodt.cas.resource.nodes.repo.factory");
+			
+			String gmetadHost = System
+                     .getProperty("org.apache.oodt.cas.resource.monitor.ganglia.gemtad.host.address");
+			
+			int gmetadPort = Integer.valueOf(System
+		                .getProperty("org.apache.oodt.cas.resource.monitor.ganglia.gemtad.host.port"));
+
+			LoadCalculator loadCalculator = GenericResourceManagerObjectFactory
+					.getLoadCalculatorFromServiceFactory(loadCalculatorFactoryStr);
+
+			return new GangliaResourceMonitor(loadCalculator, gmetadHost, gmetadPort);
+		} catch (Exception e) {
+			LOG.log(Level.SEVERE,
+					"Failed to create Resource Monitor : " + e.getMessage(), e);
+			return null;
+		}
+	}
 
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public ResourceMonitor createResourceMonitor() {
-        try {
-            String loadCalculatorFactoryStr =  System
-                    .getProperty("org.apache.oodt.cas.resource.monitor.loadcalc.factory");
-            String nodeRepoFactoryStr = System
-                    .getProperty("org.apache.oodt.cas.resource.nodes.repo.factory");
-
-            List<ResourceNode> resourceNodes = GenericResourceManagerObjectFactory
-                    .getNodeRepositoryFromFactory(nodeRepoFactoryStr).loadNodes();
-            LoadCalculator loadCalculator = GenericResourceManagerObjectFactory
-                    .getLoadCalculatorFromServiceFactory(loadCalculatorFactoryStr);
-
-            return new GangliaResourceMonitor(loadCalculator, resourceNodes);
-        } catch (Exception e){
-            LOG.log(Level.SEVERE, "Failed to create Resource Monitor : " + e.getMessage(), e);
-            return null;
-        }
-    }
 }

Modified: oodt/trunk/resource/src/main/java/org/apache/oodt/cas/resource/monitor/ganglia/loadcalc/LoadCalculator.java
URL: http://svn.apache.org/viewvc/oodt/trunk/resource/src/main/java/org/apache/oodt/cas/resource/monitor/ganglia/loadcalc/LoadCalculator.java?rev=1624863&r1=1624862&r2=1624863&view=diff
==============================================================================
--- oodt/trunk/resource/src/main/java/org/apache/oodt/cas/resource/monitor/ganglia/loadcalc/LoadCalculator.java (original)
+++ oodt/trunk/resource/src/main/java/org/apache/oodt/cas/resource/monitor/ganglia/loadcalc/LoadCalculator.java Sun Sep 14 15:44:19 2014
@@ -17,29 +17,21 @@
 
 package org.apache.oodt.cas.resource.monitor.ganglia.loadcalc;
 
-import java.util.HashMap;
+//JDK imports
+import java.util.Map;
 
 /**
  * @author rajith
+ * @author mattmann
  * @version $Revision$
  */
 public interface LoadCalculator {
 
-    public static int MAXIMUM_FRACTION_DIGITS = 3;
-
-    /*Ganglia metric keys*/
-    public static String LOAD_ONE = "load_one";
-    public static String LOAD_FIVE = "load_five";
-    public static String LOAD_FIFTEEN = "load_fifteen";
-    public static String CPU_NUM = "cpu_num";
-
     /**
      * Calculate the load and normalize it within the given node's capacity
-     * @param nodeCapacity node's {@link org.apache.oodt.cas.resource.structs.ResourceNode}
-     *                     capacity
      * @param metrics status metrics of the resource node
      * @return An integer representation of the load within 0 and node's capacity
      */
-    public float calculateLoad(float nodeCapacity, HashMap<String, String> metrics);
+    public double calculateLoad(Map<String, String> metrics);
 
 }

Modified: oodt/trunk/resource/src/main/java/org/apache/oodt/cas/resource/monitor/ganglia/loadcalc/WeightedAverageLoadCalc.java
URL: http://svn.apache.org/viewvc/oodt/trunk/resource/src/main/java/org/apache/oodt/cas/resource/monitor/ganglia/loadcalc/WeightedAverageLoadCalc.java?rev=1624863&r1=1624862&r2=1624863&view=diff
==============================================================================
--- oodt/trunk/resource/src/main/java/org/apache/oodt/cas/resource/monitor/ganglia/loadcalc/WeightedAverageLoadCalc.java (original)
+++ oodt/trunk/resource/src/main/java/org/apache/oodt/cas/resource/monitor/ganglia/loadcalc/WeightedAverageLoadCalc.java Sun Sep 14 15:44:19 2014
@@ -17,20 +17,29 @@
 
 package org.apache.oodt.cas.resource.monitor.ganglia.loadcalc;
 
-import org.apache.oodt.cas.resource.monitor.ganglia.GangliaMetKeys;
-
+//JDK imports
 import java.text.NumberFormat;
-import java.util.HashMap;
+import java.util.Map;
+
+//OODT imports
+import static org.apache.oodt.cas.resource.monitor.ganglia.GangliaMetKeys.MAXIMUM_FRACTION_DIGITS;
+import static org.apache.oodt.cas.resource.monitor.ganglia.GangliaMetKeys.TN;
+import static org.apache.oodt.cas.resource.monitor.ganglia.GangliaMetKeys.TMAX;
+import static org.apache.oodt.cas.resource.monitor.ganglia.GangliaMetKeys.CPU_NUM;
+import static org.apache.oodt.cas.resource.monitor.ganglia.GangliaMetKeys.LOAD_ONE;
+import static org.apache.oodt.cas.resource.monitor.ganglia.GangliaMetKeys.LOAD_FIVE;
+import static org.apache.oodt.cas.resource.monitor.ganglia.GangliaMetKeys.LOAD_FIFTEEN;
 
 /**
  * @author rajith
+ * @author mattmann
  * @version $Revision$
  */
 public class WeightedAverageLoadCalc implements LoadCalculator {
 
-    private int loadOneWeight;
-    private int loadFiveWeight;
-    private int loadFifteenWeight;
+    private double loadOneWeight;
+    private double loadFiveWeight;
+    private double loadFifteenWeight;
 
     /* to format the load value*/
     private NumberFormat numberFormat;
@@ -41,7 +50,7 @@ public class WeightedAverageLoadCalc imp
      * @param loadFiveWeight weight for the load_five
      * @param loadFifteenWeight weight for the load_fifteen
      */
-    public WeightedAverageLoadCalc (int loadOneWeight, int loadFiveWeight, int loadFifteenWeight){
+    public WeightedAverageLoadCalc (double loadOneWeight, double loadFiveWeight, double loadFifteenWeight){
         this.loadOneWeight = loadOneWeight;
         this.loadFiveWeight = loadFiveWeight;
         this.loadFifteenWeight = loadFifteenWeight;
@@ -53,34 +62,36 @@ public class WeightedAverageLoadCalc imp
      * {@inheritDoc}
      *
      * load is calculated as follows
-     * weightedLoadOne = loadOneWeight * minimum of (nodeCapacity, ((loadOne/numOfCPUs) * nodeCapacity))
+     * weightedLoadOne = loadOneWeight * minimum of (numOfCPUs, ((loadOne/numOfCPUs) * numOfCPUs))
      *
      * load = (weightedLoadOne + weightedLoadFive + weightedLoadFifteen) /
      *           (loadOneWeight + loadFiveWeight + loadFifteenWeight)
      */
     @Override
-    public float calculateLoad(float nodeCapacity, HashMap<String, String> nodeMetrics) {
-        int tn = Integer.valueOf(nodeMetrics.get(GangliaMetKeys.TN));
-        int tmax = Integer.valueOf(nodeMetrics.get(GangliaMetKeys.TMAX));
+    public double calculateLoad(Map<String, String> nodeMetrics) {
+        double tn = Double.valueOf(nodeMetrics.get(TN));
+        double tmax = Double.valueOf(nodeMetrics.get(TMAX));
+        double numCpus = Double.valueOf(nodeMetrics.get(CPU_NUM));
 
         if(tn > (4 * tmax)){
-           return nodeCapacity; //if the node is offline assign the node's capacity as the load
+           return numCpus; //if the node is offline assign the node's capacity as the load
         }
         else {
-            float weightedLoadOne = loadOneWeight * Math.min(nodeCapacity,
-                    ((Float.valueOf(nodeMetrics.get(LOAD_ONE)) /
-                            Float.valueOf(nodeMetrics.get(CPU_NUM))) * nodeCapacity));
-            float weightedLoadFive = loadFiveWeight * Math.min(nodeCapacity,
-                    ((Float.valueOf(nodeMetrics.get(LOAD_FIVE)) /
-                            Float.valueOf(nodeMetrics.get(CPU_NUM)))* nodeCapacity));
-            float weightedLoadFifteen = loadFifteenWeight * Math.min(nodeCapacity,
-                    ((Float.valueOf(nodeMetrics.get(LOAD_FIFTEEN)) /
-                            Float.valueOf(nodeMetrics.get(CPU_NUM)))* nodeCapacity));
+            double weightedLoadOne = loadOneWeight * Math.min(numCpus,
+                    ((Double.valueOf(nodeMetrics.get(LOAD_ONE)) /
+                            Double.valueOf(nodeMetrics.get(CPU_NUM))) * numCpus));
+            double weightedLoadFive = loadFiveWeight * Math.min(numCpus,
+                    ((Double.valueOf(nodeMetrics.get(LOAD_FIVE)) /
+                            Double.valueOf(nodeMetrics.get(CPU_NUM)))* numCpus));
+            double weightedLoadFifteen = loadFifteenWeight * Math.min(numCpus,
+                    ((Double.valueOf(nodeMetrics.get(LOAD_FIFTEEN)) /
+                            Double.valueOf(nodeMetrics.get(CPU_NUM)))* numCpus));
 
-            float weightedLoadAverage = (weightedLoadOne + weightedLoadFive + weightedLoadFifteen) /
+            double weightedLoadAverage = (weightedLoadOne + weightedLoadFive + weightedLoadFifteen) /
                     (loadOneWeight + loadFiveWeight + loadFifteenWeight);
-
-            return Float.valueOf(numberFormat.format(weightedLoadAverage));
+            
+            System.out.println("Weighted load one: ["+weightedLoadOne+"]: weighted load five: ["+weightedLoadFive+"] weighted load fifteen: ["+weightedLoadFifteen+"]");
+            return Double.valueOf(numberFormat.format(weightedLoadAverage));
         }
     }
 }

Modified: oodt/trunk/resource/src/main/java/org/apache/oodt/cas/resource/monitor/utils/MockGmetad.java
URL: http://svn.apache.org/viewvc/oodt/trunk/resource/src/main/java/org/apache/oodt/cas/resource/monitor/utils/MockGmetad.java?rev=1624863&r1=1623586&r2=1624863&view=diff
==============================================================================
--- oodt/trunk/resource/src/main/java/org/apache/oodt/cas/resource/monitor/utils/MockGmetad.java (original)
+++ oodt/trunk/resource/src/main/java/org/apache/oodt/cas/resource/monitor/utils/MockGmetad.java Sun Sep 14 15:44:19 2014
@@ -17,12 +17,18 @@
 
 package org.apache.oodt.cas.resource.monitor.utils;
 
-import java.io.*;
+//JDK imports
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.OutputStream;
 import java.net.ServerSocket;
 import java.net.Socket;
 
 /**
  * @author rajith
+ * @author mattmann
  * @version $Revision$
  *
  * Ganglia meta daemon mock server
@@ -78,4 +84,24 @@ public class MockGmetad implements Runna
         }
 
     }
+    
+    public static void main(String [] args) throws Exception{
+    	String xmlPath = null;
+    	int serverPort = -1;
+    	final String usage = "java MockGmetad <xml path> <port>\n";
+    	
+    	if (args.length != 2){
+    		System.err.println(usage);
+    		System.exit(1);
+    	}
+    	
+    	xmlPath = args[0];
+    	serverPort = Integer.valueOf(args[1]);
+    	
+    	MockGmetad gmetad = new MockGmetad(serverPort, xmlPath);
+    	ThreadLocal<MockGmetad> mockGmetad = new ThreadLocal<MockGmetad>();
+    	mockGmetad.set(gmetad);
+    	Thread mockGmetadServer = new Thread(mockGmetad.get());
+        mockGmetadServer.start();
+    }
 }

Modified: oodt/trunk/resource/src/main/java/org/apache/oodt/cas/resource/util/GenericResourceManagerObjectFactory.java
URL: http://svn.apache.org/viewvc/oodt/trunk/resource/src/main/java/org/apache/oodt/cas/resource/util/GenericResourceManagerObjectFactory.java?rev=1624863&r1=1624862&r2=1624863&view=diff
==============================================================================
--- oodt/trunk/resource/src/main/java/org/apache/oodt/cas/resource/util/GenericResourceManagerObjectFactory.java (original)
+++ oodt/trunk/resource/src/main/java/org/apache/oodt/cas/resource/util/GenericResourceManagerObjectFactory.java Sun Sep 14 15:44:19 2014
@@ -31,8 +31,6 @@ import org.apache.oodt.cas.resource.jobr
 import org.apache.oodt.cas.resource.jobrepo.JobRepositoryFactory;
 import org.apache.oodt.cas.resource.monitor.Monitor;
 import org.apache.oodt.cas.resource.monitor.MonitorFactory;
-import org.apache.oodt.cas.resource.monitor.ResourceMonitor;
-import org.apache.oodt.cas.resource.monitor.ResourceMonitorFactory;
 import org.apache.oodt.cas.resource.monitor.ganglia.loadcalc.LoadCalculator;
 import org.apache.oodt.cas.resource.monitor.ganglia.loadcalc.LoadCalculatorFactory;
 import org.apache.oodt.cas.resource.noderepo.NodeRepository;
@@ -386,44 +384,6 @@ public final class GenericResourceManage
     return null;
   }
 
-
-    /**
-     * Creates a new {@link org.apache.oodt.cas.resource.monitor.ResourceMonitor} implementation from the given String name of
-     * the {@link org.apache.oodt.cas.resource.monitor.ResourceMonitorFactory}.
-     *
-     * @param serviceFactory
-     *          The name of the {@link org.apache.oodt.cas.resource.monitor.ResourceMonitorFactory} class to use to create
-     *          {@link org.apache.oodt.cas.resource.monitor.ResourceMonitor}s.
-     * @return A new {@link org.apache.oodt.cas.resource.monitor.ResourceMonitor} implementation.
-     */
-    public static ResourceMonitor getResourceMonitorFromServiceFactory(String serviceFactory){
-        Class clazz;
-        ResourceMonitorFactory factory;
-
-        try {
-            clazz = Class.forName(serviceFactory);
-            factory = (ResourceMonitorFactory) clazz.newInstance();
-            return factory.createResourceMonitor();
-        } catch (ClassNotFoundException e) {
-            e.printStackTrace();
-            LOG.log(Level.WARNING,
-                    "ClassNotFoundException when loading resource monitor factory class "
-                            + serviceFactory + " Message: " + e.getMessage());
-        } catch (InstantiationException e) {
-            e.printStackTrace();
-            LOG.log(Level.WARNING,
-                    "InstantiationException when loading resource monitor factory class "
-                            + serviceFactory + " Message: " + e.getMessage());
-        } catch (IllegalAccessException e) {
-            e.printStackTrace();
-            LOG.log(Level.WARNING,
-                    "IllegalAccessException when loading resource monitor factory class "
-                            + serviceFactory + " Message: " + e.getMessage());
-        }
-
-        return null;
-    }
-
     /**
      * Creates a new {@link org.apache.oodt.cas.resource.monitor.ganglia.loadcalc.LoadCalculator} implementation from the given String name of
      * the {@link ResourceMonitorFactory}.

Modified: oodt/trunk/resource/src/test/org/apache/oodt/cas/resource/monitor/TestAssignmentMonitor.java
URL: http://svn.apache.org/viewvc/oodt/trunk/resource/src/test/org/apache/oodt/cas/resource/monitor/TestAssignmentMonitor.java?rev=1624863&r1=1624862&r2=1624863&view=diff
==============================================================================
--- oodt/trunk/resource/src/test/org/apache/oodt/cas/resource/monitor/TestAssignmentMonitor.java (original)
+++ oodt/trunk/resource/src/test/org/apache/oodt/cas/resource/monitor/TestAssignmentMonitor.java Sun Sep 14 15:44:19 2014
@@ -134,14 +134,6 @@ public class TestAssignmentMonitor exten
                 && this.assgnMon.getNodes().containsAll(nodes));
     }
 
-    public void testGetLoad() throws MonitorException {
-        ResourceNode resourceNode = assgnMon.getNodeById("localhost");
-
-        /*since the Gmetad is offline load value from the ResourceMonitor
-        * should be node's capacity, therefore AssignmentMonitors
-        * load value is 0*/
-        assertEquals(0, assgnMon.getLoad(resourceNode));
-    }
 
     private void generateTestConfig() throws IOException {
         String propertiesFile = "." + File.separator + "src" + File.separator +

Modified: oodt/trunk/resource/src/test/org/apache/oodt/cas/resource/monitor/TestGangliaResourceMonitor.java
URL: http://svn.apache.org/viewvc/oodt/trunk/resource/src/test/org/apache/oodt/cas/resource/monitor/TestGangliaResourceMonitor.java?rev=1624863&r1=1624862&r2=1624863&view=diff
==============================================================================
--- oodt/trunk/resource/src/test/org/apache/oodt/cas/resource/monitor/TestGangliaResourceMonitor.java (original)
+++ oodt/trunk/resource/src/test/org/apache/oodt/cas/resource/monitor/TestGangliaResourceMonitor.java Sun Sep 14 15:44:19 2014
@@ -17,20 +17,26 @@
 
 package org.apache.oodt.cas.resource.monitor;
 
+//Junit imports
 import junit.framework.TestCase;
+
+
+//OODT imports
 import org.apache.oodt.cas.resource.monitor.ganglia.GangliaResourceMonitor;
 import org.apache.oodt.cas.resource.monitor.ganglia.GangliaResourceMonitorFactory;
 import org.apache.oodt.cas.resource.monitor.utils.MockGmetad;
 import org.apache.oodt.cas.resource.structs.ResourceNode;
 
+
+//JDK imports
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.IOException;
-import java.net.MalformedURLException;
-import java.net.URL;
+import java.util.List;
 
 /**
  * @author rajith
+ * @author mattmann
  * @version $Revision$
  *
  * Test Suite for the {@link org.apache.oodt.cas.resource.monitor.ganglia.GangliaResourceMonitor}
@@ -46,7 +52,7 @@ public class TestGangliaResourceMonitor 
         runMockGmetad();
 
         gangliaResourceMonitor = (GangliaResourceMonitor)
-                new GangliaResourceMonitorFactory().createResourceMonitor();
+                new GangliaResourceMonitorFactory().createMonitor();
     }
 
     @Override
@@ -56,39 +62,71 @@ public class TestGangliaResourceMonitor 
 
     public void testGetLoad() {
         try {
-            ResourceNode resourceNode =
-                    new ResourceNode("localhost",new URL("http://localhost:9999"), 8);
-            assertEquals((float)1.556, gangliaResourceMonitor.getLoad(resourceNode));
-        } catch (MalformedURLException ignored) {
-            //Exception ignored
-        }
-    }
-
-    public void testUpdateLoad(){
-        try {
-            ResourceNode resourceNode =
-                    new ResourceNode("remotenode",new URL("http://localhost:9999"), 9);
-            assertEquals((float) 1.751, gangliaResourceMonitor.getLoad(resourceNode));
-
-            gangliaResourceMonitor.updateLoad("remotenode", 6);
-            assertEquals((float) 6, gangliaResourceMonitor.getLoad(resourceNode));
-        }  catch (MalformedURLException ignored) {
-            //Exception ignored
+            ResourceNode resourceNode = new ResourceNode();
+            resourceNode.setId("localhost");
+            assertEquals(1, gangliaResourceMonitor.getLoad(resourceNode));
+        } catch (Exception e) {
+        	e.printStackTrace();
+            fail(e.getMessage());
         }
     }
 
     public void testRemoveNodeById(){
         try {
-            ResourceNode resourceNode =
-                    new ResourceNode("remotenode",new URL("http://localhost:9999"), 9);
-
-            gangliaResourceMonitor.removeNodeById("remotenode");
-            /*since node is not available node's capacity is returned as the load*/
-            assertEquals((float) 9, gangliaResourceMonitor.getLoad(resourceNode));
-        } catch (MalformedURLException ignored) {
-            //Exception ignored
+            gangliaResourceMonitor.removeNodeById("localhost");
+            assertNull(gangliaResourceMonitor.getNodeById("remotenode"));
+        } catch (Exception e) {
+            e.printStackTrace();
+            fail(e.getMessage());
         }
     }
+    
+    public void testGetNodes(){
+    	try{
+    		List<ResourceNode> nodes = gangliaResourceMonitor.getNodes();
+    		assertNotNull(nodes);
+    		assertEquals(3, nodes.size());
+    		boolean hasLocal = false;
+    		boolean hasLocal2 = false;
+    		boolean hasRemote = false;
+    		
+    		for(ResourceNode node: nodes){
+    			if(node.getNodeId().equals("localhost")){
+    				hasLocal = true;
+    			}
+    			else if(node.getNodeId().equals("localhost2")){
+    				hasLocal2 = true;
+    			}
+    			else if(node.getNodeId().equals("remotenode")){
+    				hasRemote = true;
+    			}
+    			
+    		}
+    		assertTrue(hasLocal&&hasLocal2&&hasRemote);
+    	}
+    	catch (Exception e){
+    		e.printStackTrace();
+    		fail(e.getMessage());
+    	}
+    }
+    
+    public void testGetNodeById(){
+    	try{
+    		ResourceNode node = gangliaResourceMonitor.getNodeById("localhost");
+    		assertNotNull(node);
+    		assertEquals("localhost", node.getNodeId());
+    		node = gangliaResourceMonitor.getNodeById("localhost2");
+    		assertNotNull(node);
+    		assertEquals("localhost2", node.getNodeId());
+    		node = gangliaResourceMonitor.getNodeById("remotenode");
+    		assertNotNull(node);
+    		assertEquals("remotenode", node.getNodeId());
+    	}
+    	catch(Exception e){
+    		e.printStackTrace();
+    		fail(e.getMessage());
+    	}
+    }
 
     private void runMockGmetad() {
         int port = Integer.valueOf(System
@@ -96,7 +134,6 @@ public class TestGangliaResourceMonitor 
         String sampleXMLfilePath = "." + File.separator + "src" + File.separator +
                 "testdata" + File.separator + "resourcemon" + File.separator + "gangliaXMLdump.xml";
         mockGmetad.set(new MockGmetad(port, sampleXMLfilePath));
-
         Thread mockGmetadServer = new Thread(mockGmetad.get());
         mockGmetadServer.start();
     }
@@ -105,9 +142,6 @@ public class TestGangliaResourceMonitor 
         String propertiesFile = "." + File.separator + "src" + File.separator +
                 "testdata" + File.separator + "test.resource.properties";
         System.getProperties().load(new FileInputStream(new File(propertiesFile)));
-        System.setProperty("org.apache.oodt.cas.resource.nodes.dirs",
-                "file:" + new File("." + File.separator + "src" + File.separator +
-                        "testdata" + File.separator + "resourcemon").getAbsolutePath());
     }
 
 }

Modified: oodt/trunk/resource/src/test/org/apache/oodt/cas/resource/monitor/TestGangliaXMLParser.java
URL: http://svn.apache.org/viewvc/oodt/trunk/resource/src/test/org/apache/oodt/cas/resource/monitor/TestGangliaXMLParser.java?rev=1624863&r1=1624862&r2=1624863&view=diff
==============================================================================
--- oodt/trunk/resource/src/test/org/apache/oodt/cas/resource/monitor/TestGangliaXMLParser.java (original)
+++ oodt/trunk/resource/src/test/org/apache/oodt/cas/resource/monitor/TestGangliaXMLParser.java Sun Sep 14 15:44:19 2014
@@ -17,16 +17,20 @@
 
 package org.apache.oodt.cas.resource.monitor;
 
+//Junit imports
 import junit.framework.TestCase;
-import org.apache.oodt.cas.resource.monitor.exceptions.GangliaMonitorException;
+
+//OODT imports
+import org.apache.oodt.cas.resource.structs.exceptions.MonitorException;
 import org.apache.oodt.cas.resource.monitor.ganglia.GangliaMetKeys;
 import org.apache.oodt.cas.resource.monitor.ganglia.GangliaXMLParser;
 import org.apache.oodt.cas.resource.monitor.ganglia.configuration.Cluster;
 import org.apache.oodt.cas.resource.monitor.ganglia.configuration.Host;
 import org.apache.oodt.cas.resource.monitor.ganglia.configuration.Metric;
+
+//JDK imports
 import org.xml.sax.InputSource;
 import org.xml.sax.SAXException;
-
 import javax.xml.parsers.ParserConfigurationException;
 import javax.xml.parsers.SAXParserFactory;
 import java.io.*;
@@ -35,6 +39,7 @@ import java.util.List;
 
 /**
  * @author rajith
+ * @author mattmann
  * @version $Revision$
  *
  * Test Suite for the {@link GangliaXMLParser}
@@ -47,7 +52,7 @@ public class TestGangliaXMLParser extend
      * {@inheritDoc}
      * Read gangliaXMLdump.xml and build the grid configuration
      */
-    protected void setUp() throws GangliaMonitorException, IOException {
+    protected void setUp() throws MonitorException, IOException {
         StringBuilder stringBuffer = new StringBuilder();
 
         try {
@@ -75,11 +80,11 @@ public class TestGangliaXMLParser extend
             parser.parse(new InputSource(new StringReader(buffer)), gangliaXMLParser);
             gridConfiguration = gangliaXMLParser.getGridConfiguration();
         } catch (ParserConfigurationException e) {
-            throw new GangliaMonitorException("Error while parsing: " + e.getMessage());
+            throw new MonitorException("Error while parsing: " + e.getMessage());
         } catch (SAXException e) {
-            throw new GangliaMonitorException("Error while parsing the XML: " + e.getMessage());
+            throw new MonitorException("Error while parsing the XML: " + e.getMessage());
         } catch (IOException e) {
-            throw new GangliaMonitorException("I/O error: " + e.getMessage());
+            throw new MonitorException("I/O error: " + e.getMessage());
         }
     }
 

Modified: oodt/trunk/resource/src/testdata/policy/nodes.xml
URL: http://svn.apache.org/viewvc/oodt/trunk/resource/src/testdata/policy/nodes.xml?rev=1624863&r1=1624862&r2=1624863&view=diff
==============================================================================
--- oodt/trunk/resource/src/testdata/policy/nodes.xml (original)
+++ oodt/trunk/resource/src/testdata/policy/nodes.xml Sun Sep 14 15:44:19 2014
@@ -16,7 +16,7 @@ License for the specific language govern
 the License.
 -->
 <cas:resourcenodes xmlns:cas="http://oodt.jpl.nasa.gov/1.0/cas">
-	<node nodeId="localhost" ip="http://localhost:2001" capacity="8"/>
+	<node nodeId="localhost" ip="http://localhost:2001" capacity="8.0"/>
 	<!-- EnvReplace Example 
 	<node nodeId="somehost" ip="http://somehost:[BATCH_STUB_PORT]" capacity="8" envReplace="true"/>
 	-->

Modified: oodt/trunk/resource/src/testdata/test.resource.properties
URL: http://svn.apache.org/viewvc/oodt/trunk/resource/src/testdata/test.resource.properties?rev=1624863&r1=1624862&r2=1624863&view=diff
==============================================================================
--- oodt/trunk/resource/src/testdata/test.resource.properties (original)
+++ oodt/trunk/resource/src/testdata/test.resource.properties Sun Sep 14 15:44:19 2014
@@ -72,6 +72,5 @@ org.apache.oodt.cas.resource.monitor.loa
 
 #ganglia meta daemon (gmetad) host details
 org.apache.oodt.cas.resource.monitor.ganglia.gemtad.host.address=localhost
-#invalid port
 org.apache.oodt.cas.resource.monitor.ganglia.gemtad.host.port=8659