summaryrefslogtreecommitdiffstats
path: root/src/com.gluster.storage.management.server
diff options
context:
space:
mode:
authorDhandapani <dhandapani@gluster.com>2011-04-07 11:23:29 +0530
committerDhandapani <dhandapani@gluster.com>2011-04-07 14:10:10 +0530
commit94a933503b611a2d410654056d1a456dcd019e3f (patch)
treec3cb2467dad682f16a0ba96b0e3f13f527e22bfc /src/com.gluster.storage.management.server
parent9cc77baa3c96fa74afbb3807dd01525e28638934 (diff)
parent8607a637093bda070f78289c34c529a990967ff4 (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')
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/constants/VolumeOptionsDefaults.java20
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/AlertsResource.java85
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/DiscoveredServersResource.java4
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/GlusterServersResource.java6
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/RunningTaskResource.java40
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/ServerResource.java21
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/VolumesResource.java34
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();