diff options
| author | Dhandapani <dhandapani@gluster.com> | 2011-04-07 11:23:29 +0530 |
|---|---|---|
| committer | Dhandapani <dhandapani@gluster.com> | 2011-04-07 14:10:10 +0530 |
| commit | 94a933503b611a2d410654056d1a456dcd019e3f (patch) | |
| tree | c3cb2467dad682f16a0ba96b0e3f13f527e22bfc /src/com.gluster.storage.management.server | |
| parent | 9cc77baa3c96fa74afbb3807dd01525e28638934 (diff) | |
| parent | 8607a637093bda070f78289c34c529a990967ff4 (diff) | |
Merge commit 'upstream/master'
Conflicts:
src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/utils/GlusterUtil.java
src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/VolumesResource.java
Diffstat (limited to 'src/com.gluster.storage.management.server')
7 files changed, 158 insertions, 52 deletions
diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/constants/VolumeOptionsDefaults.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/constants/VolumeOptionsDefaults.java index 384038f4..4093a4ee 100644 --- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/constants/VolumeOptionsDefaults.java +++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/constants/VolumeOptionsDefaults.java @@ -23,25 +23,23 @@ package com.gluster.storage.management.server.constants; import java.util.ArrayList; import java.util.List; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlElementWrapper; -import javax.xml.bind.annotation.XmlRootElement; +import org.springframework.stereotype.Component; import com.gluster.storage.management.core.constants.CoreConstants; import com.gluster.storage.management.core.model.VolumeOptionInfo; -@XmlRootElement +@Component public class VolumeOptionsDefaults { - @XmlElementWrapper(name = "volumeOptions") - @XmlElement(name = "volumeOption", type = VolumeOptionInfo.class) public List<VolumeOptionInfo> options; - + public VolumeOptionsDefaults() { } - - public VolumeOptionsDefaults getDefaults() { - options = getVolumeOptionsInfo(); - return this; + + /** + * @return list of volume option information objects + */ + public List<VolumeOptionInfo> getDefaults() { + return getVolumeOptionsInfo(); } /** diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/AlertsResource.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/AlertsResource.java new file mode 100644 index 00000000..266bd8d3 --- /dev/null +++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/AlertsResource.java @@ -0,0 +1,85 @@ +package com.gluster.storage.management.server.resources; + +import static com.gluster.storage.management.core.constants.RESTConstants.RESOURCE_PATH_ALERTS; + +import java.util.ArrayList; +import java.util.List; + +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.MediaType; + +import org.springframework.stereotype.Component; + +import com.gluster.storage.management.core.model.AlertListResponse; +import com.gluster.storage.management.core.model.Alert; + +@Component +@Path(RESOURCE_PATH_ALERTS) +public class AlertsResource { + + @GET + @Produces(MediaType.TEXT_XML) + public AlertListResponse getAlerts() { + + List<Alert> alerts = new ArrayList<Alert>(); + + // TODO To implement the following dummy alerts + // Alert #1 + Alert alert = new Alert(); + alert.setId("0001"); + alert.setReference("Server1"); // Server + alert.setType(Alert.ALERT_TYPES.CPU_USAGE_ALERT); + alert.setMessage(alert.getAlertType(alert.getType()) + " in server: " + alert.getReference()); + alerts.add(alert); + + // Alert #2 + alert = new Alert(); + alert.setId("0002"); + alert.setReference("Server2"); // server:Disk - brick + alert.setType(Alert.ALERT_TYPES.MEMORY_USAGE_ALERT); + alert.setMessage(alert.getAlertType(alert.getType()) + " in server: " + alert.getReference()); + alerts.add(alert); + + // Alert #3 + alert = new Alert(); + alert.setId("0003"); + alert.setReference("Volume1"); // Volume name + alert.setType(Alert.ALERT_TYPES.DISK_USAGE_ALERT); + alert.setMessage(alert.getAlertType(alert.getType()) + " in volume: " + alert.getReference()); + alerts.add(alert); + + // Alert #4 + alert = new Alert(); + alert.setId("0004"); + alert.setReference("Volume2"); // Volume name + alert.setType(Alert.ALERT_TYPES.OFFLINE_VOLUME_DISKS_ALERT); + alert.setMessage("Server1:sda1, server2:sda2 are " + alert.getAlertType(alert.getType()) + " in volume: " + alert.getReference()); + alerts.add(alert); + + // Alert #5 + alert = new Alert(); + alert.setId("0005"); + alert.setReference("Volume2"); // Volume name + alert.setType(Alert.ALERT_TYPES.OFFLINE_SERVERS_ALERT); + alert.setMessage("server1, server2 are " + alert.getAlertType(alert.getType()) + " in volume: " + alert.getReference()); + alerts.add(alert); + + return new AlertListResponse(alerts); + + } + + public static void main(String[] args) { + /* + // Unit test code + AlertsResource alertResource = new AlertsResource(); + AlertsListResponse alertResponse = alertResource.getAlerts(); + List<Alert> alerts = alertResponse.getAlerts(); + for (Alert alert: alerts) { + System.out.println(alert.getMessage()); + } + */ + } + +} diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/DiscoveredServersResource.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/DiscoveredServersResource.java index 5987857a..c1ddffd1 100644 --- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/DiscoveredServersResource.java +++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/DiscoveredServersResource.java @@ -32,9 +32,9 @@ import org.springframework.stereotype.Component; import com.gluster.storage.management.core.model.Response; import com.gluster.storage.management.core.model.Server; -import com.gluster.storage.management.core.model.ServerListResponse; import com.gluster.storage.management.core.model.Status; -import com.gluster.storage.management.core.model.StringListResponse; +import com.gluster.storage.management.core.response.ServerListResponse; +import com.gluster.storage.management.core.response.StringListResponse; import com.sun.jersey.spi.resource.Singleton; @Component 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 6204bf9b..e8adceb7 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 @@ -30,13 +30,13 @@ import javax.ws.rs.core.MediaType; import org.springframework.stereotype.Component; -import com.gluster.storage.management.core.model.GenericResponse; 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.GlusterServerListResponse; -import com.gluster.storage.management.core.model.GlusterServerResponse; import com.gluster.storage.management.core.model.Server; import com.gluster.storage.management.core.model.Status; +import com.gluster.storage.management.core.response.GenericResponse; +import com.gluster.storage.management.core.response.GlusterServerListResponse; +import com.gluster.storage.management.core.response.GlusterServerResponse; import com.gluster.storage.management.core.utils.GlusterUtil; import com.gluster.storage.management.core.utils.ProcessResult; import com.sun.jersey.spi.resource.Singleton; diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/RunningTaskResource.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/RunningTaskResource.java index 2cec4c36..2177085e 100644 --- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/RunningTaskResource.java +++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/RunningTaskResource.java @@ -33,14 +33,18 @@ import org.springframework.stereotype.Component; import static com.gluster.storage.management.core.constants.RESTConstants.RESOURCE_PATH_RUNNING_TASKS; import com.gluster.storage.management.core.model.Response; import com.gluster.storage.management.core.model.RunningTask; -import com.gluster.storage.management.core.model.RunningTaskListResponse; import com.gluster.storage.management.core.model.RunningTaskStatus; import com.gluster.storage.management.core.model.Status; +import com.gluster.storage.management.core.response.RunningTaskListResponse; +import com.gluster.storage.management.core.utils.StringUtil; import com.gluster.storage.management.server.runningtasks.managers.RunningTaskManager; @Component @Path(RESOURCE_PATH_RUNNING_TASKS) public class RunningTaskResource { + + private static final String PKG = "com.gluster.storage.management.server.runningtasks.managers"; + private static final String MANAGER = "Manager"; @GET @Produces(MediaType.TEXT_XML) @@ -55,46 +59,48 @@ public class RunningTaskResource { // Volume rebalance RunningTask task = new RunningTask(); task.setId("0001"); - task.setType("VolumeRebalance"); - task.setReference(""); - task.setDescription("Volume [Volume1] rebalance is running"); + task.setType(RunningTask.TASK_TYPES.VOLUME_REBALANCE); + task.setReference("Volume1"); + task.setTaskInfo( task.getTaskType(task.getType()) + "is running in volume " + task.getReference()); task.setStatus(status); runningTasks.add(task); task = new RunningTask(); task.setId("0002"); - task.setType("VolumeRebalance"); - task.setReference(""); - task.setDescription("Volume [Volume2] rebalance is running"); - //task.setDescription("Error: volume rebalance operation failed at fd 0000 [/export/test-song-volume/mydirectory/test-video.avi"); + task.setType(RunningTask.TASK_TYPES.VOLUME_REBALANCE); + task.setReference("Volume2"); + task.setTaskInfo( task.getTaskType(task.getType()) + " is running in volume " + task.getReference()); task.setStatus(status); runningTasks.add(task); // MigrateDisk task = new RunningTask(); task.setId("0003"); - task.setType("MigrateDisk"); - task.setReference(""); - task.setDescription("Disk migration [Volume3/sda] is running"); + task.setType(RunningTask.TASK_TYPES.MIGRATE_DISK); + task.setReference("Volume3:server1:sda1"); // Disk reference + task.setTaskInfo( task.getTaskType(task.getType()) + " is running in disk " + task.getReference() + ""); task.setStatus(status); runningTasks.add(task); // FormatDisk task = new RunningTask(); task.setId("0004"); - task.setType("FormatDisk"); - task.setReference(""); - task.setDescription("Volume [vol1] rebalance is running"); + task.setType(RunningTask.TASK_TYPES.FORMAT_DISK); + task.setReference("Volume1:server1:sdb1"); // Disk reference + task.setTaskInfo( task.getTaskType(task.getType()) + " " + task.getReference() ); status.setPercentageSupported(true); status.getPercentCompleted(45); task.setStatus(status); runningTasks.add(task); + return new RunningTaskListResponse(Status.STATUS_SUCCESS, runningTasks); } @SuppressWarnings("rawtypes") - public Response startTask(@FormParam("taskType") String taskType) { - String managerClassName = "com.gluster.storage.management.server.runningtasks.managers." + taskType + "Manager"; + public Response startTask(@FormParam("taskType") RunningTask.TASK_TYPES taskType) { + String taskTypeStr = StringUtil.removeSpaces( new RunningTask().getTaskType(taskType) ); + String managerClassName = PKG + "." + taskTypeStr + MANAGER; + Class managerClass; RunningTaskManager manager = null; try { @@ -121,7 +127,7 @@ public class RunningTaskResource { RunningTaskListResponse tasks = rt.getRunningTasks(); List<RunningTask> runningTasks = tasks.getRunningTasks(); for( RunningTask x : runningTasks) { - System.out.println( x.getId() + " : " + x.getType() + " : " + x.getDescription() ); + System.out.println( x.getId() + " : " + x.getType() + " : " + x.getTaskInfo() ); } } } diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/ServerResource.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/ServerResource.java index 97b874e2..08e8c9a6 100644 --- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/ServerResource.java +++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/ServerResource.java @@ -18,17 +18,16 @@ *******************************************************************************/ package com.gluster.storage.management.server.resources;
-import java.io.File;
-
-import javax.ws.rs.GET;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
-import javax.ws.rs.core.MediaType;
-
-import com.gluster.storage.management.core.utils.FileUtil;
-import com.gluster.storage.management.core.utils.MD5Crypt;
-import com.gluster.storage.management.core.utils.ProcessResult;
-import com.gluster.storage.management.core.utils.ProcessUtil;
+import java.io.File; + +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.MediaType; + +import com.gluster.storage.management.core.utils.FileUtil; +import com.gluster.storage.management.core.utils.ProcessResult; +import com.gluster.storage.management.core.utils.ProcessUtil; @Path("/server")
public class ServerResource {
diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/VolumesResource.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/VolumesResource.java index 9ac1f9d6..19310240 100644 --- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/VolumesResource.java +++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/VolumesResource.java @@ -42,14 +42,16 @@ import javax.ws.rs.core.MediaType; import org.springframework.beans.factory.annotation.Autowired; -import com.gluster.storage.management.core.model.Disk; -import com.gluster.storage.management.core.model.GenericResponse; import com.gluster.storage.management.core.model.Status; import com.gluster.storage.management.core.model.Volume; +import com.gluster.storage.management.core.response.GenericResponse; +import com.gluster.storage.management.core.response.VolumeListResponse; +import com.gluster.storage.management.core.response.VolumeOptionInfoListResponse; import com.gluster.storage.management.core.utils.GlusterUtil; import com.gluster.storage.management.core.utils.ProcessResult; import com.gluster.storage.management.server.constants.VolumeOptionsDefaults; import com.gluster.storage.management.server.utils.ServerUtil; +import com.sun.jersey.api.core.InjectParam; import com.sun.jersey.spi.resource.Singleton; @Singleton @@ -62,14 +64,28 @@ public class VolumesResource { private static ServerUtil serverUtil; private final GlusterUtil glusterUtil = new GlusterUtil(); + + @InjectParam + private VolumeOptionsDefaults volumeOptionsDefaults; + @GET + @Produces(MediaType.TEXT_XML) + public VolumeListResponse getAllVolumes() { + try { + return new VolumeListResponse(Status.STATUS_SUCCESS, glusterUtil.getAllVolumes()); + } catch(Exception e) { + // TODO: log the error + return new VolumeListResponse(new Status(Status.STATUS_CODE_FAILURE, e.getMessage()), null); + } + } + @POST @Consumes(MediaType.TEXT_XML) @Produces(MediaType.TEXT_XML) public GenericResponse<String> createVolume(Volume volume) { //Create the directories for the volume List<String> bricks = new ArrayList<String>(); - for(Disk disk : volume.getDisks()) { + for(String disk : volume.getDisks()) { String brickNotation = getBrickNotation(volume, disk); if (brickNotation != null) { @@ -108,18 +124,20 @@ public class VolumesResource { @GET @Path(SUBRESOURCE_DEFAULT_OPTIONS) @Produces(MediaType.TEXT_XML) - public VolumeOptionsDefaults getDefaultOptions() { + public VolumeOptionInfoListResponse getDefaultOptions() { // TODO: Fetch all volume options with their default values from GlusterFS // whenever such a CLI command is made available in GlusterFS - return new VolumeOptionsDefaults().getDefaults(); + return new VolumeOptionInfoListResponse(Status.STATUS_SUCCESS, volumeOptionsDefaults.getDefaults()); } - private String getBrickNotation(Volume vol, Disk disk) { - Status result = serverUtil.executeOnServer(true, disk.getServerName(), "python CreateVolumeExportDirectory.py " + disk + " " + vol.getName()); + private String getBrickNotation(Volume vol, String disk) { + String serverName = disk.split(":")[0]; + String exportDirectory = disk.split(":")[1]; + Status result = serverUtil.executeOnServer(true, serverName, "python " + SCRIPT_NAME +" " + exportDirectory + " " + vol.getName()); if(result.getCode() == 0) { String dirName = "/export/" + disk + "/" + vol.getName() ; - return disk.getServerName() + ":" + dirName; + return serverName + ":" + dirName; } else { return null; // return result.getMessage(); |
