summaryrefslogtreecommitdiffstats
path: root/src/com.gluster.storage.management.server
diff options
context:
space:
mode:
authorShireesh Anjal <shireesh@gluster.com>2011-06-22 21:29:26 +0530
committerShireesh Anjal <shireesh@gluster.com>2011-06-22 21:42:42 +0530
commit18d81acc64bc166073f8772c748e2cb31fdd2b65 (patch)
treed12924252a1ec30c10de9315f335d6d54b6c2be2 /src/com.gluster.storage.management.server
parenta0c4177e29c2c3157f610c9143427662e8cd337f (diff)
REST API Enhancements
Diffstat (limited to 'src/com.gluster.storage.management.server')
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/AbstractServersResource.java2
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/GlusterServersResource.java86
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/GlusterUtil.java10
3 files changed, 60 insertions, 38 deletions
diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/AbstractServersResource.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/AbstractServersResource.java
index ec396539..0bc0f061 100644
--- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/AbstractServersResource.java
+++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/AbstractServersResource.java
@@ -30,7 +30,7 @@ import com.sun.jersey.api.core.InjectParam;
/**
* Abstract resource class for servers. Abstracts basic server related functionality like "get server details".
*/
-public class AbstractServersResource {
+public class AbstractServersResource extends AbstractResource {
@InjectParam
protected ServerUtil serverUtil;
diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/GlusterServersResource.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/GlusterServersResource.java
index 48c9b7fc..03a927ab 100644
--- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/GlusterServersResource.java
+++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/GlusterServersResource.java
@@ -18,6 +18,7 @@
*******************************************************************************/
package com.gluster.storage.management.server.resources;
+import static com.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_CLUSTER_NAME;
import static com.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_SERVER_NAME;
import static com.gluster.storage.management.core.constants.RESTConstants.PATH_PARAM_CLUSTER_NAME;
import static com.gluster.storage.management.core.constants.RESTConstants.PATH_PARAM_SERVER_NAME;
@@ -35,12 +36,14 @@ import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.gluster.storage.management.core.constants.CoreConstants;
import com.gluster.storage.management.core.exceptions.ConnectionException;
+import com.gluster.storage.management.core.exceptions.GlusterRuntimeException;
import com.gluster.storage.management.core.model.GlusterServer;
import com.gluster.storage.management.core.model.GlusterServer.SERVER_STATUS;
import com.gluster.storage.management.core.model.Status;
@@ -121,62 +124,83 @@ public class GlusterServersResource extends AbstractServersResource {
}
@GET
+ @Produces(MediaType.APPLICATION_JSON)
+ public Response getGlusterServersJSON(
+ @PathParam(PATH_PARAM_CLUSTER_NAME) String clusterName) {
+ return getGlusterServers(clusterName, MediaType.APPLICATION_JSON);
+ }
+
+ @GET
@Produces(MediaType.APPLICATION_XML)
- public GlusterServerListResponse getGlusterServers(
+ public Response getGlusterServersXML(
@PathParam(PATH_PARAM_CLUSTER_NAME) String clusterName) {
+ return getGlusterServers(clusterName, MediaType.APPLICATION_XML);
+ }
+
+ public Response getGlusterServers(String clusterName, String mediaType) {
List<GlusterServer> glusterServers = new ArrayList<GlusterServer>();
+ if (clusterName == null || clusterName.isEmpty()) {
+ return badRequestResponse("Parameter [" + FORM_PARAM_CLUSTER_NAME + "] is missing in request!");
+ }
+
ClusterInfo cluster = clusterService.getCluster(clusterName);
- if(cluster == null) {
- return new GlusterServerListResponse(new Status(Status.STATUS_CODE_FAILURE, "Cluster [" + clusterName
- + "] doesn't exist!"), null);
+ if (cluster == null) {
+ return badRequestResponse("Cluster [" + clusterName + "] not found!");
}
-
+
if(cluster.getServers().size() == 0) {
- return new GlusterServerListResponse(Status.STATUS_SUCCESS, glusterServers);
+ return okResponse(new GlusterServerListResponse(glusterServers), mediaType);
}
GlusterServer onlineServer = getOnlineServer(clusterName);
- if(onlineServer == null) {
- return new GlusterServerListResponse(new Status(Status.STATUS_CODE_FAILURE,
- "No online server found in cluster [" + clusterName + "]"), glusterServers);
+ if (onlineServer == null) {
+ return errorResponse("No online servers found in cluster [" + clusterName + "]");
}
try {
- glusterServers = glusterUtil.getGlusterServers(onlineServer);
- } catch(ConnectionException e) {
- // online server has gone offline! try with a different one.
- onlineServer = getNewOnlineServer(clusterName);
- if(onlineServer == null) {
- return new GlusterServerListResponse(new Status(Status.STATUS_CODE_FAILURE,
- "No online server found in cluster [" + clusterName + "]"), glusterServers);
- }
-
- glusterServers = glusterUtil.getGlusterServers(onlineServer);
+ glusterServers = getGlusterServers(clusterName, onlineServer);
+ } catch(Exception e) {
+ return errorResponse(e.getMessage());
}
- int errCount = 0;
- StringBuilder errMsg = new StringBuilder("Couldn't fetch details for server(s): ");
+ String errMsg = fetDetailsOfServers(glusterServers, onlineServer);
+ if(!errMsg.isEmpty()) {
+ return errorResponse("Couldn't fetch details for server(s): " + errMsg);
+ }
+
+ return okResponse(new GlusterServerListResponse(glusterServers), mediaType);
+ }
+
+ public String fetDetailsOfServers(List<GlusterServer> glusterServers, GlusterServer onlineServer) {
+ String errMsg = "";
for (GlusterServer server : glusterServers) {
if (server.getStatus() == SERVER_STATUS.ONLINE && !server.getName().equals(onlineServer.getName())) {
try {
fetchServerDetails(server);
} catch (Exception e) {
- errMsg.append(CoreConstants.NEWLINE + server.getName() + " : [" + e.getMessage() + "]");
- errCount++;
+ errMsg += CoreConstants.NEWLINE + server.getName() + " : [" + e.getMessage() + "]";
}
}
}
- Status status;
- if (errCount==0) {
- status = new Status(Status.STATUS_CODE_SUCCESS, "Success");
- } else if(errCount == glusterServers.size()) {
- status = new Status(Status.STATUS_CODE_FAILURE, errMsg.toString());
- } else {
- status = new Status(Status.STATUS_CODE_PART_SUCCESS, errMsg.toString());
+ return errMsg;
+ }
+
+ public List<GlusterServer> getGlusterServers(String clusterName, GlusterServer onlineServer) {
+ List<GlusterServer> glusterServers;
+ try {
+ glusterServers = glusterUtil.getGlusterServers(onlineServer);
+ } catch(ConnectionException e) {
+ // online server has gone offline! try with a different one.
+ onlineServer = getNewOnlineServer(clusterName);
+ if(onlineServer == null) {
+ throw new GlusterRuntimeException("No online servers found in cluster [" + clusterName + "]");
+ }
+
+ glusterServers = glusterUtil.getGlusterServers(onlineServer);
}
- return new GlusterServerListResponse(status, glusterServers);
+ return glusterServers;
}
@GET
diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/GlusterUtil.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/GlusterUtil.java
index 3472745e..f5ad63ab 100644
--- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/GlusterUtil.java
+++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/GlusterUtil.java
@@ -30,23 +30,21 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.gluster.storage.management.core.constants.CoreConstants;
-import com.gluster.storage.management.core.constants.RESTConstants;
import com.gluster.storage.management.core.exceptions.GlusterRuntimeException;
import com.gluster.storage.management.core.model.Brick;
import com.gluster.storage.management.core.model.Brick.BRICK_STATUS;
import com.gluster.storage.management.core.model.GlusterServer;
import com.gluster.storage.management.core.model.GlusterServer.SERVER_STATUS;
import com.gluster.storage.management.core.model.Status;
+import com.gluster.storage.management.core.model.Task.TASK_TYPE;
import com.gluster.storage.management.core.model.TaskInfo;
import com.gluster.storage.management.core.model.Volume;
-import com.gluster.storage.management.core.model.Task.TASK_TYPE;
import com.gluster.storage.management.core.model.Volume.TRANSPORT_TYPE;
import com.gluster.storage.management.core.model.Volume.VOLUME_STATUS;
import com.gluster.storage.management.core.model.Volume.VOLUME_TYPE;
-import com.gluster.storage.management.core.model.VolumeOptions;
-import com.gluster.storage.management.core.response.TaskResponse;
import com.gluster.storage.management.core.utils.GlusterCoreUtil;
import com.gluster.storage.management.core.utils.ProcessResult;
+import com.gluster.storage.management.core.utils.StringUtil;
import com.gluster.storage.management.server.resources.TasksResource;
import com.gluster.storage.management.server.tasks.MigrateDiskTask;
import com.sun.jersey.api.core.InjectParam;
@@ -235,7 +233,7 @@ public class GlusterUtil {
TRANSPORT_TYPE transportType = Volume.getTransportTypeByStr(transportTypeStr);
transportTypeArg = (transportType == TRANSPORT_TYPE.ETHERNET) ? "tcp" : "rdma";
- String command = prepareVolumeCreateCommand(volumeName, glusterCoreUtil.extractList(bricks, ","), count,
+ String command = prepareVolumeCreateCommand(volumeName, StringUtil.extractList(bricks, ","), count,
volTypeArg, transportTypeArg);
ProcessResult result = sshUtil.executeRemote(knownServer, command);
if (!result.isSuccess()) {
@@ -243,7 +241,7 @@ public class GlusterUtil {
}
try {
- createOptions(volumeName, glusterCoreUtil.extractMap(options, ",", "="), knownServer);
+ createOptions(volumeName, StringUtil.extractMap(options, ",", "="), knownServer);
} catch(Exception e) {
throw new GlusterRuntimeException(
"Volume created successfully, however following errors occurred while setting options: "