diff options
| author | Shireesh Anjal <shireesh@gluster.com> | 2011-06-22 21:29:26 +0530 |
|---|---|---|
| committer | Shireesh Anjal <shireesh@gluster.com> | 2011-06-22 21:42:42 +0530 |
| commit | 18d81acc64bc166073f8772c748e2cb31fdd2b65 (patch) | |
| tree | d12924252a1ec30c10de9315f335d6d54b6c2be2 /src/com.gluster.storage.management.server | |
| parent | a0c4177e29c2c3157f610c9143427662e8cd337f (diff) | |
REST API Enhancements
Diffstat (limited to 'src/com.gluster.storage.management.server')
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: " |
