summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSelvam <selvam@gluster.com>2011-03-30 18:02:08 +0530
committerSelvam <selvam@gluster.com>2011-03-30 18:02:08 +0530
commitf30c67deb0b525911d1f3d891574e808ef3068b1 (patch)
treee770801e9f225ecf7aeef40e0e3b8fef53c00cf1
parent5c39a47fdd3987bb5eee35f7f7397ce127c8919e (diff)
Alerts section in volumes summary page
-rw-r--r--src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/AlertsClient.java35
-rw-r--r--src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterDataModelManager.java7
-rw-r--r--src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/constants/RESTConstants.java1
-rw-r--r--src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Alert.java51
-rw-r--r--src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/AlertListResponse.java36
-rw-r--r--src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/AlertStatus.java13
-rw-r--r--src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Cluster.java13
-rw-r--r--src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/RunningTask.java20
-rw-r--r--src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Status.java2
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/VolumesSummaryView.java53
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/AlertsResource.java69
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/RunningTaskResource.java32
12 files changed, 289 insertions, 43 deletions
diff --git a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/AlertsClient.java b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/AlertsClient.java
new file mode 100644
index 00000000..007ca3c1
--- /dev/null
+++ b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/AlertsClient.java
@@ -0,0 +1,35 @@
+package com.gluster.storage.management.client;
+
+import java.util.List;
+
+import com.gluster.storage.management.core.constants.RESTConstants;
+import com.gluster.storage.management.core.model.Alert;
+import com.gluster.storage.management.core.model.AlertListResponse;
+
+public class AlertsClient extends AbstractClient {
+
+ private static final String RESOURCE_NAME = RESTConstants.RESOURCE_PATH_ALERTS;
+
+ public AlertsClient(String securityToken) {
+ super(securityToken);
+ }
+
+ @Override
+ public String getResourceName() {
+ return RESOURCE_NAME;
+ }
+
+ @SuppressWarnings("rawtypes")
+ private Object fetchAlerts(Class responseClass) {
+ return fetchResource( responseClass );
+ }
+
+ public List<Alert> getAlerts() {
+ AlertListResponse response = (AlertListResponse) fetchAlerts(AlertListResponse.class);
+ return response.getAlerts();
+ }
+}
+
+
+
+
diff --git a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterDataModelManager.java b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterDataModelManager.java
index de0112db..bd1d93ac 100644
--- a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterDataModelManager.java
+++ b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterDataModelManager.java
@@ -121,6 +121,8 @@ public class GlusterDataModelManager {
createDummyLogMessages();
initializeRunningTasks(cluster);
+
+ initializeAlerts(cluster);
model.addCluster(cluster);
}
@@ -247,6 +249,11 @@ public class GlusterDataModelManager {
public void initializeRunningTasks(Cluster cluster) {
cluster.setRunningTasks(new RunningTaskClient(securityToken).getRunningTasks());
}
+
+ public void initializeAlerts(Cluster cluster) {
+ cluster.setAlerts(new AlertsClient(securityToken).getAlerts());
+ System.out.println(cluster.getAlerts().toString());
+ }
public List<LogMessage> createDummyLogMessages() {
addMessagesForDisk(logMessages, s1da);
diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/constants/RESTConstants.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/constants/RESTConstants.java
index fb40be8a..47697eb9 100644
--- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/constants/RESTConstants.java
+++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/constants/RESTConstants.java
@@ -34,4 +34,5 @@ public class RESTConstants {
// Running tasks resource
public static final String RESOURCE_PATH_RUNNING_TASKS = "/cluster/runningtasks";
+ public static final String RESOURCE_PATH_ALERTS = "/cluster/alerts";
}
diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Alert.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Alert.java
new file mode 100644
index 00000000..b2882102
--- /dev/null
+++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Alert.java
@@ -0,0 +1,51 @@
+package com.gluster.storage.management.core.model;
+
+import javax.xml.bind.annotation.XmlRootElement;
+
+@XmlRootElement(name = "alert")
+public class Alert {
+ public enum ALERT_TYPES { CPU_ALERT, MEMORY_ALERT, DISK_ALERT };
+
+ public String[] ALERT_TYPE_STR = {"High CPU Usage", "High Memory Usage", "Low Disk Space"};
+
+ protected String id;
+ protected ALERT_TYPES type;
+ protected String reference;
+ protected String message;
+
+ public String getAlertType( ALERT_TYPES alertType) {
+ return ALERT_TYPE_STR[alertType.ordinal()];
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public ALERT_TYPES getType() {
+ return type;
+ }
+
+ public void setType(ALERT_TYPES type) {
+ this.type = type;
+ }
+
+ public String getReference() {
+ return reference;
+ }
+
+ public void setReference(String reference) {
+ this.reference = reference;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+}
diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/AlertListResponse.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/AlertListResponse.java
new file mode 100644
index 00000000..bb3c754e
--- /dev/null
+++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/AlertListResponse.java
@@ -0,0 +1,36 @@
+package com.gluster.storage.management.core.model;
+
+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;
+
+@XmlRootElement(name = "response")
+public class AlertListResponse extends AbstractResponse {
+ private List<Alert> alerts = new ArrayList<Alert>();
+
+ public AlertListResponse() {
+
+ }
+
+ public AlertListResponse(List<Alert> alerts) {
+ setAlerts(alerts);
+ }
+
+ public void setAlerts(List<Alert> alerts) {
+ this.alerts = alerts;
+ }
+
+ @XmlElementWrapper(name = "alerts")
+ @XmlElement(name = "alert", type=Alert.class)
+ public List<Alert> getAlerts() {
+ return this.alerts;
+ }
+
+ @Override
+ public Object getData() {
+ return getAlerts();
+ }
+}
diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/AlertStatus.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/AlertStatus.java
new file mode 100644
index 00000000..8c563f49
--- /dev/null
+++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/AlertStatus.java
@@ -0,0 +1,13 @@
+package com.gluster.storage.management.core.model;
+
+public class AlertStatus {
+ protected String description;
+
+ public String getDescription() {
+ return description;
+ }
+
+ public void setDescription(String description) {
+ this.description = description;
+ }
+}
diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Cluster.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Cluster.java
index 65d5ebea..1af57266 100644
--- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Cluster.java
+++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Cluster.java
@@ -29,6 +29,7 @@ public class Cluster extends Entity {
List<Server> discoveredServers = new ArrayList<Server>();
List<Volume> volumes = new ArrayList<Volume>();
List<RunningTask> runningTasks = new ArrayList<RunningTask>();
+ List<Alert> alerts = new ArrayList<Alert>();
public Cluster() {
}
@@ -97,4 +98,16 @@ public class Cluster extends Entity {
public void setRunningTasks(List<RunningTask> runningTasks) {
this.runningTasks = runningTasks;
}
+
+ public List<Alert> getAlerts() {
+ return alerts;
+ }
+
+ public void setAlerts(List<Alert> alerts) {
+ this.alerts = alerts;
+ }
+
+ public void addAlert(Alert alert) {
+ this.alerts.add(alert);
+ }
} \ No newline at end of file
diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/RunningTask.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/RunningTask.java
index 1a9d63f6..32bd662e 100644
--- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/RunningTask.java
+++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/RunningTask.java
@@ -22,10 +22,12 @@ import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class RunningTask {
-
+ public enum TASK_TYPES { FORMAT_DISK, MIGRATE_DISK, VOLUME_REBALANCE };
+ public String[] TASK_TYPE_STR = {"Format Disk", "Migrate Disk", "Volume Rebalance"};
+
protected String id;
- protected String type; // FormatDisk, MigrateDisk, VolumeRebalance
- protected Object reference;
+ protected TASK_TYPES type; // FormatDisk, MigrateDisk, VolumeRebalance
+ protected String reference;
protected String description;
protected RunningTaskStatus status; // TODO redefine
@@ -33,6 +35,10 @@ public class RunningTask {
}
+ public String getTaskType(TASK_TYPES type) {
+ return TASK_TYPE_STR[type.ordinal()];
+ }
+
public String getId() {
return id;
}
@@ -41,19 +47,19 @@ public class RunningTask {
this.id = id;
}
- public String getType() {
+ public TASK_TYPES getType() {
return type;
}
- public void setType(String type) {
+ public void setType(TASK_TYPES type) {
this.type = type;
}
- public Object getReference() {
+ public String getReference() {
return reference;
}
- public void setReference(Object reference) {
+ public void setReference(String reference) {
this.reference = reference;
}
diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Status.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Status.java
index 06d6efe1..c5fdb246 100644
--- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Status.java
+++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Status.java
@@ -27,6 +27,8 @@ public class Status {
public static final int STATUS_CODE_SUCCESS = 0;
public static final int STATUS_CODE_FAILURE = 1;
public static final int STATUS_CODE_RUNNING = 2;
+ public static final int STATUS_CODE_PAUSE = 3;
+ public static final int STATUS_CODE_WARNING = 4;
public static final Status STATUS_SUCCESS = new Status(STATUS_CODE_SUCCESS, "Success");
public static final Status STATUS_FAILURE = new Status(STATUS_CODE_FAILURE, "Failure");
diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/VolumesSummaryView.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/VolumesSummaryView.java
index 9477e170..e770cb73 100644
--- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/VolumesSummaryView.java
+++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/VolumesSummaryView.java
@@ -31,9 +31,11 @@ import org.eclipse.ui.forms.widgets.ScrolledForm;
import org.eclipse.ui.part.ViewPart;
import com.gluster.storage.management.core.constants.CoreConstants;
+import com.gluster.storage.management.core.model.Alert;
import com.gluster.storage.management.core.model.EntityGroup;
import com.gluster.storage.management.core.model.Cluster;
import com.gluster.storage.management.core.model.GlusterDataModel;
+import com.gluster.storage.management.core.model.RunningTaskStatus;
import com.gluster.storage.management.client.GlusterDataModelManager;
import com.gluster.storage.management.core.model.RunningTask;
import com.gluster.storage.management.core.model.Volume;
@@ -61,10 +63,10 @@ public class VolumesSummaryView extends ViewPart {
if (volumes == null) {
Object selectedObj = guiHelper.getSelectedEntity(getSite(), EntityGroup.class);
if (selectedObj != null && ((EntityGroup) selectedObj).getEntityType() == Volume.class) {
- volumes = (EntityGroup<Volume>)selectedObj;
+ volumes = (EntityGroup<Volume>) selectedObj;
}
}
-
+
createSections(parent);
}
@@ -73,43 +75,52 @@ public class VolumesSummaryView extends ViewPart {
createSummarySection();
createRunningTasksSection();
createAlertsSection();
-
+
parent.layout(); // IMP: lays out the form properly
}
-
+
private void createAlertsSection() {
- Composite section = guiHelper.createSection(form, toolkit, "Alerts", null, 2, false);
+ Composite section = guiHelper.createSection(form, toolkit, "Alerts", null, 1, false);
+ // toolkit.createLabel(section, "Any alerts related to volumes\nwill be displayed here.");
+
+ Cluster cluster = (Cluster) GlusterDataModelManager.getInstance().getModel().getChildren().get(0);
+ List<Alert> alerts = cluster.getAlerts();
+ for (Alert alert : alerts) {
+ if (alert.getType() == Alert.ALERT_TYPES.DISK_ALERT) {
+ toolkit.createLabel(section, alert.getMessage());
+ }
+ }
- toolkit.createLabel(section, "Any alerts related to volumes\nwill be displayed here.");
}
private void createRunningTasksSection() {
- Composite section = guiHelper.createSection(form, toolkit, "Running Tasks", null, 2, false);
-
- GlusterDataModelManager modelManager = GlusterDataModelManager.getInstance();
- GlusterDataModel model = modelManager.getModel();
- Cluster cluster = (Cluster) model.getChildren().get(0); // Assume the first/root node of the model is cluster (invisible)
-
+ Composite section = guiHelper.createSection(form, toolkit, "Running Tasks", null, 1, false);
+
+ Cluster cluster = (Cluster) GlusterDataModelManager.getInstance().getModel().getChildren().get(0);
List<RunningTask> runningTasks = cluster.getRunningTasks();
- String taskMessage = "";
- for(RunningTask task : runningTasks) {
- if (task.getStatus().isPercentageSupported()) {
- //TODO Progress bar
+
+ for (RunningTask task : runningTasks) {
+ if (task.getType() == RunningTask.TASK_TYPES.MIGRATE_DISK
+ || task.getType() == RunningTask.TASK_TYPES.VOLUME_REBALANCE) {
+ if (task.getStatus().isPercentageSupported()) {
+ // TODO Progress bar
+ }
+ toolkit.createLabel(section, task.getDescription());
}
- //TODO show different labels for each task
- taskMessage = taskMessage + CoreConstants.NEWLINE + task.getDescription();
}
- toolkit.createLabel(section, taskMessage);
}
private void createSummarySection() {
Composite section = guiHelper.createSection(form, toolkit, "Availability", null, 2, false);
+ GlusterDataModel model = GlusterDataModelManager.getInstance().getModel();
+ Cluster cluster = (Cluster) model.getChildren().get(0);
+
Double[] values = new Double[] { Double.valueOf(getVolumeCountByStatus(volumes, VOLUME_STATUS.ONLINE)),
Double.valueOf(getVolumeCountByStatus(volumes, VOLUME_STATUS.OFFLINE)) };
createStatusChart(toolkit, section, values);
}
-
+
private int getVolumeCountByStatus(EntityGroup<Volume> volumes, VOLUME_STATUS status) {
int count = 0;
for (Volume volume : (List<Volume>) volumes.getEntities()) {
@@ -130,7 +141,7 @@ public class VolumesSummaryView extends ViewPart {
data.heightHint = 250;
chartViewerComposite.setLayoutData(data);
}
-
+
/*
* (non-Javadoc)
*
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..e9fbe253
--- /dev/null
+++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/AlertsResource.java
@@ -0,0 +1,69 @@
+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_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_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_ALERT);
+ alert.setMessage(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/RunningTaskResource.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/RunningTaskResource.java
index 2cec4c36..35bbaa95 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
@@ -55,36 +55,35 @@ 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.setDescription("Volume [" + task.getReference() + "] rebalance is running");
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.setDescription("Volume [" + task.getReference() + "] rebalance is running");
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/sda");
+ task.setDescription("Disk migration [" + task.getReference() + "] is running");
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("vol1");
+ task.setDescription("Volume [" + task.getReference() + "] rebalance is running");
status.setPercentageSupported(true);
status.getPercentCompleted(45);
task.setStatus(status);
@@ -93,8 +92,11 @@ public class RunningTaskResource {
}
@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 = new RunningTask().getTaskType(taskType).replaceAll("\\s+", "");
+ String managerClassName = "com.gluster.storage.management.server.runningtasks.managers." + taskTypeStr + "Manager";
+
Class managerClass;
RunningTaskManager manager = null;
try {