Package org.apache.oodt.cas.resource.system

Source Code of org.apache.oodt.cas.resource.system.XmlRpcResourceManagerClient

/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements.  See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License.  You may obtain a copy of the License at
*
*     http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/


package org.apache.oodt.cas.resource.system;

//APACHE imports
import org.apache.xmlrpc.CommonsXmlRpcTransportFactory;
import org.apache.xmlrpc.XmlRpcClient;
import org.apache.xmlrpc.XmlRpcException;

//OODTimports
import org.apache.oodt.cas.cli.CmdLineUtility;
import org.apache.oodt.cas.resource.structs.Job;
import org.apache.oodt.cas.resource.structs.JobInput;
import org.apache.oodt.cas.resource.structs.JobStatus;
import org.apache.oodt.cas.resource.structs.ResourceNode;
import org.apache.oodt.cas.resource.structs.exceptions.JobExecutionException;
import org.apache.oodt.cas.resource.structs.exceptions.JobRepositoryException;
import org.apache.oodt.cas.resource.structs.exceptions.MonitorException;
import org.apache.oodt.cas.resource.structs.exceptions.QueueManagerException;
import org.apache.oodt.cas.resource.util.XmlRpcStructFactory;

//JDK imports
import java.net.URL;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.List;
import java.util.Vector;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.io.FileInputStream;
import java.io.File;
import java.io.IOException;

/**
* @author mattmann
* @version $Revision$
*
* <p>
* The XML RPC based resource manager client.
* </p>
*
*/
public class XmlRpcResourceManagerClient {

    /* our xml rpc client */
    private XmlRpcClient client = null;

    /* our log stream */
    private static Logger LOG = Logger
            .getLogger(XmlRpcResourceManagerClient.class.getName());

    /* resource manager url */
    private URL resMgrUrl = null;

    /**
     * <p>
     * Constructs a new XmlRpcResourceManagerClient with the given
     * <code>url</code>.
     * </p>
     *
     * @param url
     *            The url pointer to the xml rpc resource manager service.
     */
    public XmlRpcResourceManagerClient(URL url) {
        // set up the configuration, if there is any
        if (System.getProperty("org.apache.oodt.cas.resource.properties") != null) {
            String configFile = System
                    .getProperty("org.apache.oodt.cas.resource.properties");
            LOG.log(Level.INFO,
                    "Loading Resource Manager Configuration Properties from: ["
                            + configFile + "]");
            try {
                System.getProperties().load(
                        new FileInputStream(new File(configFile)));
            } catch (Exception e) {
                LOG.log(Level.INFO,
                        "Error loading configuration properties from: ["
                                + configFile + "]");
            }

        }

        CommonsXmlRpcTransportFactory transportFactory = new CommonsXmlRpcTransportFactory(
                url);
        int connectionTimeoutMins = Integer
                .getInteger(
                        "org.apache.oodt.cas.resource.system.xmlrpc.connectionTimeout.minutes",
                        20).intValue();
        int connectionTimeout = connectionTimeoutMins * 60 * 1000;
        int requestTimeoutMins = Integer
                .getInteger(
                        "org.apache.oodt.cas.resource.system.xmlrpc.requestTimeout.minutes",
                        60).intValue();
        int requestTimeout = requestTimeoutMins * 60 * 1000;
        transportFactory.setConnectionTimeout(connectionTimeout);
        transportFactory.setTimeout(requestTimeout);
        client = new XmlRpcClient(url, transportFactory);
        resMgrUrl = url;
    }

    public static void main(String[] args) {
       CmdLineUtility cmdLineUtility = new CmdLineUtility();
       cmdLineUtility.run(args);
    }

    public boolean isJobComplete(String jobId) throws JobRepositoryException {
        Vector argList = new Vector();
        argList.add(jobId);

        boolean complete = false;

        try {
            complete = ((Boolean) client.execute("resourcemgr.isJobComplete",
                    argList)).booleanValue();
        } catch (XmlRpcException e) {
            throw new JobRepositoryException(e.getMessage(), e);
        } catch (IOException e) {
            throw new JobRepositoryException(e.getMessage(), e);
        }

        return complete;
    }

    public Job getJobInfo(String jobId) throws JobRepositoryException {
        Vector argList = new Vector();
        argList.add(jobId);

        Hashtable jobHash = null;

        try {
            jobHash = (Hashtable) client.execute("resourcemgr.getJobInfo",
                    argList);
        } catch (XmlRpcException e) {
            throw new JobRepositoryException(e.getMessage(), e);
        } catch (IOException e) {
            throw new JobRepositoryException(e.getMessage(), e);
        }

        return XmlRpcStructFactory.getJobFromXmlRpc(jobHash);
    }

    public boolean isAlive() {
        Vector argList = new Vector();

        try {
            return ((Boolean) client.execute("resourcemgr.isAlive", argList))
                    .booleanValue();
        } catch (XmlRpcException e) {
            return false;
        } catch (IOException e) {
            return false;
        }

    }

    /**
     * Gets the number of Jobs in JobQueue
     * @return Number of Jobs in JobQueue
     * @throws JobRepositoryException On Any Exception
     */
    public int getJobQueueSize() throws JobRepositoryException {
        try {
            Vector argList = new Vector();
            return ((Integer) client.execute("resourcemgr.getJobQueueSize", argList));
        } catch (Exception e) {
            throw new JobRepositoryException("Failed to get JobQueue from server : " + e.getMessage(), e);
        }
    }
   
    /**
     * Gets the max number of Jobs allowed in JobQueue
     * @return Max number of Jobs
     * @throws JobRepositoryException On Any Exception
     */
    public int getJobQueueCapacity() throws JobRepositoryException {
        try {
            Vector argList = new Vector();
            return ((Integer) client.execute("resourcemgr.getJobQueueCapacity", argList));
        } catch (Exception e) {
            throw new JobRepositoryException("Failed to get JobQueue capacity from server : " + e.getMessage(), e);
        }
    }
   
    public boolean killJob(String jobId) {
        Vector argList = new Vector();
        argList.add(jobId);

        try {
            return ((Boolean) client.execute("resourcemgr.killJob", argList))
                    .booleanValue();
        } catch (XmlRpcException e) {
            return false;
        } catch (IOException e) {
            return false;
        }
    }

    public String getExecutionNode(String jobId) {
        Vector argList = new Vector();
        argList.add(jobId);

        try {
            return (String) client.execute("resourcemgr.getExecutionNode", argList);
        } catch (XmlRpcException e) {
            return null;
        } catch (IOException e) {
            return null;
        }
    }

    public String submitJob(Job exec, JobInput in) throws JobExecutionException {
        Vector argList = new Vector();
        argList.add(XmlRpcStructFactory.getXmlRpcJob(exec));
        argList.add(in.write());

        LOG.log(Level.FINEST, argList.toString());

        String jobId = null;

        try {
            jobId = (String) client.execute("resourcemgr.handleJob", argList);
        } catch (XmlRpcException e) {
            throw new JobExecutionException(e.getMessage(), e);
        } catch (IOException e) {
            throw new JobExecutionException(e.getMessage(), e);
        }

        return jobId;

    }

    public boolean submitJob(Job exec, JobInput in, URL hostUrl)
            throws JobExecutionException {
        Vector argList = new Vector();
        argList.add(XmlRpcStructFactory.getXmlRpcJob(exec));
        argList.add(in.write());
        argList.add(hostUrl.toString());

        boolean success = false;

        try {
            success = ((Boolean) client.execute("resourcemgr.handleJob",
                    argList)).booleanValue();
        } catch (XmlRpcException e) {
            throw new JobExecutionException(e.getMessage(), e);
        } catch (IOException e) {
            throw new JobExecutionException(e.getMessage(), e);
        }

        return success;

    }

    public List getNodes() throws MonitorException {
        Vector argList = new Vector();

        Vector nodeVector = null;

        try {
            nodeVector = (Vector) client.execute("resourcemgr.getNodes",
                    argList);
        } catch (XmlRpcException e) {
            throw new MonitorException(e.getMessage(), e);
        } catch (IOException e) {
            throw new MonitorException(e.getMessage(), e);
        }

        return XmlRpcStructFactory.getResourceNodeListFromXmlRpc(nodeVector);

    }

    public ResourceNode getNodeById(String nodeId) throws MonitorException {
        Vector argList = new Vector();
        argList.add(nodeId);

        Hashtable resNodeHash = null;

        try {
            resNodeHash = (Hashtable) client.execute("resourcemgr.getNodeById",
                    argList);
        } catch (XmlRpcException e) {
            throw new MonitorException(e.getMessage(), e);
        } catch (IOException e) {
            throw new MonitorException(e.getMessage(), e);
        }

        return XmlRpcStructFactory.getResourceNodeFromXmlRpc(resNodeHash);

    }

    /**
     * @return the resMgrUrl
     */
    public URL getResMgrUrl() {
        return resMgrUrl;
    }

    /**
     * @param resMgrUrl
     *            the resMgrUrl to set
     */
    public void setResMgrUrl(URL resMgrUrl) {
        this.resMgrUrl = resMgrUrl;
    }

    /**
     * Creates a queue with the given name
     * @param queueName The name of the queue to be created
     * @throws QueueManagerException on any error
     */
    public void addQueue(String queueName) throws QueueManagerException {
        try {
            Vector<Object> argList = new Vector<Object>();
            argList.add(queueName);
            client.execute("resourcemgr.addQueue", argList);
        }catch (Exception e) {
            throw new QueueManagerException(e.getMessage(), e);
        }
    }
   
    /**
     * Removes the queue with the given name
     * @param queueName The name of the queue to be removed
     * @throws QueueManagerException on any error
     */
    public void removeQueue(String queueName) throws QueueManagerException {
        try {
            Vector<Object> argList = new Vector<Object>();
            argList.add(queueName);
            client.execute("resourcemgr.removeQueue", argList);
        }catch (Exception e) {
            throw new QueueManagerException(e.getMessage(), e);
        }
    }
   
    /**
     * Adds a node
     * @param node The node to be added
     * @throws MonitorException on any error
     */
    public void addNode(ResourceNode node) throws MonitorException {
        try {
            Vector<Object> argList = new Vector<Object>();
            argList.add(XmlRpcStructFactory.getXmlRpcResourceNode(node));
            client.execute("resourcemgr.addNode", argList);
        }catch (Exception e) {
            throw new MonitorException(e.getMessage(), e);
        }
    }
   
    /**
     * Removes the node with the given id
     * @param nodeId The id of the node to be removed
     * @throws MonitorException on any error
     */
    public void removeNode(String nodeId) throws MonitorException {
        try {
            Vector<Object> argList = new Vector<Object>();
            argList.add(nodeId);
            client.execute("resourcemgr.removeNode", argList);
        }catch (Exception e) {
            throw new MonitorException(e.getMessage(), e);
        }
    }
   
    public void setNodeCapacity(String nodeId, int capacity) throws MonitorException{
      try{
        Vector<Object> argList = new Vector<Object>();
            argList.add(nodeId);
            argList.add(new Integer(capacity));
            client.execute("resourcemgr.setNodeCapacity", argList);
      }catch (Exception e){
        throw new MonitorException(e.getMessage(), e);
      }
    }
   
    /**
     * Addes the node with given id to the queue with the given name
     * @param nodeId The id of the node to be added to the given queueName
     * @param queueName The name of the queue to add the given node
     * @throws QueueManagerException on any error
     */
    public void addNodeToQueue(String nodeId, String queueName) throws QueueManagerException {
        try {
            Vector<Object> argList = new Vector<Object>();
            argList.add(nodeId);
            argList.add(queueName);
            client.execute("resourcemgr.addNodeToQueue", argList);
        }catch (Exception e) {
            throw new QueueManagerException(e.getMessage(), e);
        }
    }
   
    /**
     * Remove the node with the given id from the queue with the given name
     * @param nodeId The id of the node to be remove from the given queueName
     * @param queueName The name of the queue from which to remove the given node
     * @throws QueueManagerException on any error
     */
    public void removeNodeFromQueue(String nodeId, String queueName) throws QueueManagerException {
        try {
            Vector<Object> argList = new Vector<Object>();
            argList.add(nodeId);
            argList.add(queueName);
            client.execute("resourcemgr.removeNodeFromQueue", argList);
        }catch (Exception e) {
            throw new QueueManagerException(e.getMessage(), e);
        }
    }
   
    /**
     * Gets a list of currently supported queue names
     * @return A list of currently supported queue names
     * @throws QueueManagerException on any error
     */
    public List<String> getQueues() throws QueueManagerException {
        try {
            Vector<Object> argList = new Vector<Object>();
            return (List<String>) client.execute("resourcemgr.getQueues", argList);
        }catch (Exception e) {
            throw new QueueManagerException(e.getMessage(), e);
        }
    }
   
    /**
     * Gets a list of ids of the nodes in the given queue
     * @param queueName The name of the queue to get node ids from
     * @return List of node ids in the given queueName
     * @throws QueueManagerException on any error
     */
    public List<String> getNodesInQueue(String queueName) throws QueueManagerException {
        try {
            Vector<Object> argList = new Vector<Object>();
            argList.add(queueName);
            return (List<String>) client.execute("resourcemgr.getNodesInQueue", argList);
        }catch (Exception e) {
            throw new QueueManagerException(e.getMessage(), e);
        }
    }
   
    /**
     * Gets a list of queues which contain the node with the given nodeId
     * @param nodeId The id of the node to get queues it belongs to
     * @return List of queues which contain the give node
     * @throws QueueManagerException on any error
     */
    public List<String> getQueuesWithNode(String nodeId) throws QueueManagerException {
        try {
            Vector<Object> argList = new Vector<Object>();
            argList.add(nodeId);
            return (List<String>) client.execute("resourcemgr.getQueuesWithNode", argList);
        }catch (Exception e) {
            throw new QueueManagerException(e.getMessage(), e);
        }
    }
   
    /**
     * Report on the load of the requested node
     * @param nodeId The id of the node to be polled
     * @return A String showing a fraction of the loads node over its capacity
     * @throws MonitorException on any error
     */
    public String getNodeLoad(String nodeId) throws MonitorException{
      try{
        Vector<Object> argList = new Vector<Object>();
        argList.add(nodeId);
        return (String)client.execute("resourcemgr.getNodeLoad", argList);
      }catch(Exception e){
        throw new MonitorException(e.getMessage(), e);
      }
    }

  private static String getReadableJobStatus(String status) {
    if (status.equals(JobStatus.SUCCESS)) {
      return "SUCCESS";
    } else if (status.equals(JobStatus.FAILURE)) {
      return "FAILURE";
    } else if (status.equals(JobStatus.EXECUTED)) {
      return "EXECUTED";
    } else if (status.equals(JobStatus.QUEUED)) {
      return "QUEUED";
    } else if (status.equals(JobStatus.SCHEDULED)) {
      return "SCHEDULED";
    } else if (status.equals(JobStatus.KILLED)) {
      return "KILLED";
    } else
      return null;
  }
}
TOP

Related Classes of org.apache.oodt.cas.resource.system.XmlRpcResourceManagerClient

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.