/*
* 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.hms.controller.rest;
import java.io.IOException;
import java.net.InetAddress;
import java.net.URL;
import java.net.UnknownHostException;
import java.util.List;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.QueryParam;
import javax.ws.rs.WebApplicationException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.hms.common.entity.cluster.MachineState;
import org.apache.hms.common.entity.command.CreateClusterCommand;
import org.apache.hms.common.entity.command.CreateCommand;
import org.apache.hms.common.entity.command.DeleteClusterCommand;
import org.apache.hms.common.entity.command.DeleteCommand;
import org.apache.hms.common.entity.command.StatusCommand;
import org.apache.hms.common.entity.manifest.ClusterManifest;
import org.apache.hms.common.entity.manifest.ConfigManifest;
import org.apache.hms.common.entity.manifest.NodesManifest;
import org.apache.hms.common.entity.manifest.SoftwareManifest;
import org.apache.hms.common.entity.Response;
import org.apache.hms.common.util.ExceptionUtil;
import org.apache.hms.controller.Controller;
@Path("cluster")
public class ClusterManager {
private static String HOSTNAME;
private static String DEFAULT_URL;
public ClusterManager() {
InetAddress addr;
try {
addr = InetAddress.getLocalHost();
byte[] ipAddr = addr.getAddress();
HOSTNAME = addr.getHostName();
} catch (UnknownHostException e) {
HOSTNAME = "localhost";
}
StringBuilder buffer = new StringBuilder();
buffer.append("http://");
buffer.append(HOSTNAME);
buffer.append(":");
buffer.append(Controller.CONTROLLER_PORT);
buffer.append("/");
buffer.append(Controller.CONTROLLER_PREFIX);
DEFAULT_URL = buffer.toString();
}
private static Log LOG = LogFactory.getLog(ClusterManager.class);
// @POST
// @Path("create")
// public Response createCluster(CreateCommand cmd) {
// try {
// return Controller.getInstance().getClientHandler().createCluster(cmd);
// } catch (IOException e) {
// throw new WebApplicationException(e);
// }
// }
//
// @POST
// @Path("delete")
// public Response deleteCluster(DeleteCommand cmd) {
// try {
// LOG.info("received: " + cmd);
// Response r = Controller.getInstance().getClientHandler().deleteCluster(cmd);
// LOG.info("response is: " + r.getOutput());
// return r;
// } catch (IOException e) {
// LOG.warn("got excpetion: " + e);
// throw new WebApplicationException(e);
// }
// }
@GET
@Path("status/{clusterId}")
public ClusterManifest checkStatus(@PathParam("clusterId") String clusterId) {
try {
return Controller.getInstance().getClientHandler().checkClusterStatus(clusterId);
} catch (IOException e) {
LOG.warn(ExceptionUtil.getStackTrace(e));
throw new WebApplicationException(e);
}
}
@GET
@Path("node/status")
public MachineState checkNodeStatus(@QueryParam("node") String nodeId) {
try {
return Controller.getInstance().getClientHandler().checkNodeStatus(nodeId);
} catch (IOException e) {
LOG.warn(ExceptionUtil.getStackTrace(e));
throw new WebApplicationException(e);
}
}
@GET
@Path("manifest/create-cluster-sample")
public CreateClusterCommand getCreateClusterSample(@QueryParam("expand") boolean expand, @QueryParam("name") String clusterName) {
try {
URL nodeUrl = new URL(DEFAULT_URL+"/nodes/manifest/sample");
URL softwareUrl = new URL(DEFAULT_URL+"/software/manifest/sample");
URL configUrl = new URL(DEFAULT_URL+"/config/manifest/create-hadoop-cluster");
CreateClusterCommand command = new CreateClusterCommand();
ClusterManifest cm = new ClusterManifest();
if(clusterName!=null) {
cm.setClusterName(clusterName);
}
NodesManifest nodesM = new NodesManifest();
nodesM.setUrl(nodeUrl);
cm.setNodes(nodesM);
SoftwareManifest softwareM = new SoftwareManifest();
softwareM.setUrl(softwareUrl);
cm.setSoftware(softwareM);
ConfigManifest configM = new ConfigManifest();
configM.setUrl(configUrl);
cm.setConfig(configM);
if (expand) {
cm.load();
}
command.setClusterManifest(cm);
return command;
} catch (IOException e) {
throw new WebApplicationException(e);
}
}
@GET
@Path("manifest/delete-cluster-sample")
public DeleteClusterCommand getDeleteClusterSample(@QueryParam("expand") boolean expand, @QueryParam("name") String clusterName) {
try {
URL nodeUrl = new URL(DEFAULT_URL+"/nodes/manifest/sample");
URL softwareUrl = new URL(DEFAULT_URL+"/software/manifest/sample");
URL configUrl = new URL(DEFAULT_URL+"/config/manifest/delete-hadoop-cluster");
DeleteClusterCommand command = new DeleteClusterCommand();
ClusterManifest cm = new ClusterManifest();
if(clusterName!=null) {
cm.setClusterName(clusterName);
}
NodesManifest nodesM = new NodesManifest();
nodesM.setUrl(nodeUrl);
cm.setNodes(nodesM);
SoftwareManifest softwareM = new SoftwareManifest();
softwareM.setUrl(softwareUrl);
cm.setSoftware(softwareM);
ConfigManifest configM = new ConfigManifest();
configM.setUrl(configUrl);
cm.setConfig(configM);
if (expand) {
cm.load();
}
command.setClusterManifest(cm);
return command;
} catch (IOException e) {
throw new WebApplicationException(e);
}
}
@GET
@Path("list")
public List<ClusterManifest> listClusters() {
try {
List<ClusterManifest> list = Controller.getInstance().getClientHandler().listClusters();
return list;
} catch(IOException e) {
throw new WebApplicationException(e);
}
}
}