diff options
Diffstat (limited to 'src')
12 files changed, 183 insertions, 118 deletions
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 2dd91620..3c06315d 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 @@ -23,6 +23,7 @@ import java.util.Arrays; import java.util.Date; import java.util.List; +import com.gluster.storage.management.core.exceptions.GlusterRuntimeException; import com.gluster.storage.management.core.model.Cluster; import com.gluster.storage.management.core.model.ClusterListener; import com.gluster.storage.management.core.model.Disk; @@ -40,6 +41,7 @@ import com.gluster.storage.management.core.model.Volume; 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.response.RunningTaskListResponse; import com.gluster.storage.management.core.response.VolumeListResponse; import com.gluster.storage.management.client.VolumesClient; @@ -250,7 +252,11 @@ public class GlusterDataModelManager { } public void initializeRunningTasks(Cluster cluster) { - cluster.setRunningTasks(new RunningTaskClient(securityToken).getRunningTasks()); + RunningTaskListResponse runningTaskResponse = new RunningTaskClient(securityToken).getRunningTasks(); + if (!runningTaskResponse.getStatus().isSuccess()) { + throw new GlusterRuntimeException(runningTaskResponse.getStatus().getMessage()); + } + cluster.setRunningTasks( runningTaskResponse.getRunningTasks()); } public void initializeAlerts(Cluster cluster) { diff --git a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/RunningTaskClient.java b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/RunningTaskClient.java index eb5f1f3b..856eff61 100644 --- a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/RunningTaskClient.java +++ b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/RunningTaskClient.java @@ -23,8 +23,7 @@ public class RunningTaskClient extends AbstractClient { return fetchResource( responseClass ); } - public List<RunningTask> getRunningTasks() { - RunningTaskListResponse response = (RunningTaskListResponse) fetchRunningTasks( RunningTaskListResponse.class ); - return response.getRunningTasks(); + public RunningTaskListResponse getRunningTasks() { + return (RunningTaskListResponse) fetchRunningTasks( RunningTaskListResponse.class ); } } 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 index cfc710df..58e49efe 100644 --- 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 @@ -6,7 +6,7 @@ import javax.xml.bind.annotation.XmlRootElement; public class Alert { public enum ALERT_TYPES { CPU_USAGE_ALERT, MEMORY_USAGE_ALERT, DISK_USAGE_ALERT, OFFLINE_VOLUME_DISKS_ALERT, OFFLINE_SERVERS_ALERT }; - public static final String[] ALERT_TYPE_STR = {"High CPU Usage", "High Memory Usage", "Low Disk Space", "Offline Disks", "Offline Servers" }; + public static final String[] ALERT_TYPE_STR = {"High CPU Usage", "High Memory Usage", "Low Disk Space", "Offline Disk", "Offline Server" }; protected String id; protected ALERT_TYPES type; 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 9787f1ee..3860e6dc 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,12 +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 = {"Formating Disk", "Migrating Disk", "Volume Rebalance"}; + public enum TASK_TYPES { DISK_FORMAT, DISK_MIGRATE, VOLUME_REBALANCE }; + public String[] TASK_TYPE_STR = {"Formatting Disk", "Disk Migration", "Volume Rebalance"}; protected String id; - protected TASK_TYPES type; // FormatDisk, MigrateDisk, VolumeRebalance - protected String reference; // Server: Server name, Volume: Volume name, Disk: disk name referred as "VolumeName:ServerName:DiskName" + protected TASK_TYPES type; + protected String reference; // Server: Server name, Volume: Volume name, Disk: disk name referred as "VolumeName:ServerName:DiskName" protected String taskInfo; protected RunningTaskStatus status; // TODO redefine @@ -35,7 +35,7 @@ public class RunningTask { } - public String getTaskType(TASK_TYPES type) { + public String getTaskType(TASK_TYPES task) { return TASK_TYPE_STR[type.ordinal()]; } diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Volume.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Volume.java index 2322fa84..2386bcee 100644 --- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Volume.java +++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Volume.java @@ -29,7 +29,6 @@ import java.util.Set; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlTransient; -import com.gluster.storage.management.core.model.Disk.DISK_STATUS; import com.gluster.storage.management.core.utils.StringUtil; @XmlRootElement @@ -49,6 +48,7 @@ public class Volume extends Entity { public enum NAS_PROTOCOL { GLUSTERFS, NFS }; + private static final String OPTION_AUTH_ALLOW = "auth.allow:"; private static final String[] VOLUME_TYPE_STR = new String[] { "Plain Distribute", "Distributed Mirror", "Distributed Stripe" }; @@ -174,7 +174,7 @@ public class Volume extends Entity { } public String getAccessControlList() { - return accessControlList; + return options.get(OPTION_AUTH_ALLOW); } public void setAccessControlList(String accessControlList) { diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/utils/GlusterUtil.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/utils/GlusterUtil.java index 0e2b0b8d..a5e6728f 100644 --- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/utils/GlusterUtil.java +++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/utils/GlusterUtil.java @@ -25,6 +25,7 @@ import java.util.ArrayList; import java.util.List; import com.gluster.storage.management.core.constants.CoreConstants; +import com.gluster.storage.management.core.exceptions.GlusterRuntimeException; import com.gluster.storage.management.core.model.Disk; import com.gluster.storage.management.core.model.GlusterServer; import com.gluster.storage.management.core.model.GlusterServer.SERVER_STATUS; @@ -48,7 +49,6 @@ public class GlusterUtil { private static final String VOLUME_TRANSPORT_TYPE_PFX = "Transport-type:"; private static final String VOLUME_BRICKS_GROUP_PFX = "Bricks"; // Colon not used private static final String VOLUME_OPTIONS_RECONFIG_PFX = "Options Reconfigured"; - private static final String VOLUME_OPTIONS_AUTH_ALLOW = "auth.allow:"; private static final ProcessUtil processUtil = new ProcessUtil(); @@ -230,45 +230,54 @@ public class GlusterUtil { return disk.getServerName() + ":" + dirName; } - public ProcessResult getVolumeInfo() { - return new ProcessUtil().executeCommand("gluster", "volume", "info"); + private String getVolumeInfo() { + ProcessResult result = new ProcessUtil().executeCommand("gluster", "volume", "info"); + if (!result.isSuccess()) { + throw new GlusterRuntimeException("Command [gluster volume info] failed with error: [" + + result.getExitValue() + "][" + result.getOutput() + "]"); + } + return result.getOutput(); } - public List<Volume> getAllVolumes(String volumeInfoText) { + public List<Volume> getAllVolumes() { + String volumeInfoText = getVolumeInfo(); + List<Volume> volumes = new ArrayList<Volume>(); boolean isBricksGroupFound = false; boolean isOptionReconfigFound = false; - List<String> bricks = new ArrayList<String>(); Volume volume = null; for (String line : volumeInfoText.split(CoreConstants.NEWLINE)) { - if (extractToken(line, VOLUME_NAME_PFX) != null) { + String volumeName = extractToken(line, VOLUME_NAME_PFX); + if (volumeName != null) { if (volume != null) { - volume.setDisks(bricks); - bricks.clear(); + // add the previously read volume to volume list volumes.add(volume); } + + // prepare next volume to be read volume = new Volume(); - volume.setName(extractToken(line, VOLUME_NAME_PFX)); + volume.setName(volumeName); isBricksGroupFound = isOptionReconfigFound = false; continue; } - if (extractToken(line, VOLUME_TYPE_PFX) != null) { - String volumeType = extractToken(line, VOLUME_TYPE_PFX); + String volumeType = extractToken(line, VOLUME_TYPE_PFX); + if (volumeType != null) { volume.setVolumeType((volumeType == "Distribute") ? VOLUME_TYPE.PLAIN_DISTRIBUTE : VOLUME_TYPE.DISTRIBUTED_MIRROR); // TODO: for Stripe continue; } - if (extractToken(line, VOLUME_STATUS_PFX) != null) { - volume.setStatus(extractToken(line, VOLUME_STATUS_PFX).equals("Started") ? VOLUME_STATUS.ONLINE : VOLUME_STATUS.OFFLINE); + String volumeStatus = extractToken(line, VOLUME_STATUS_PFX); + if (volumeStatus != null) { + volume.setStatus(volumeStatus.equals("Started") ? VOLUME_STATUS.ONLINE : VOLUME_STATUS.OFFLINE); continue; } - if (extractToken(line, VOLUME_TRANSPORT_TYPE_PFX) != null) { - volume.setTransportType((extractToken(line, - VOLUME_TRANSPORT_TYPE_PFX) == "tcp") ? TRANSPORT_TYPE.ETHERNET + String transportType = extractToken(line, VOLUME_TRANSPORT_TYPE_PFX); + if (transportType != null) { + volume.setTransportType(transportType.equals("tcp") ? TRANSPORT_TYPE.ETHERNET : TRANSPORT_TYPE.INFINIBAND); continue; } @@ -280,7 +289,7 @@ public class GlusterUtil { if (isBricksGroupFound) { if (line.matches("Brick[0-9]+:.*")) { - bricks.add( line.split(":")[2].trim().split("/")[2].trim() ); // line: "Brick1: server1:/export/md0/volume-name" + volume.addDisk(line.split(":")[2].trim().split("/")[2].trim()); // line: "Brick1: server1:/export/md0/volume-name" continue; } else { isBricksGroupFound = false; @@ -293,14 +302,16 @@ public class GlusterUtil { } if (isOptionReconfigFound) { - if (extractToken(line, VOLUME_OPTIONS_AUTH_ALLOW) != null) { - volume.setAccessControlList( extractToken(line, VOLUME_OPTIONS_AUTH_ALLOW) ); + if(line.matches("^[^:]*:[^:]*$")) { + String[] parts = line.split(":"); + volume.setOption(parts[0].trim(), parts[1].trim()); + } else { isOptionReconfigFound = false; } } } + if (volume != null) {// Adding the last volume parsed - volume.setDisks(bricks); volumes.add(volume); } return volumes; diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/IImageKeys.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/IImageKeys.java index fd5972c5..513901bb 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/IImageKeys.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/IImageKeys.java @@ -42,10 +42,16 @@ public interface IImageKeys { public static final String WORK_IN_PROGRESS = "icons/progress-bar.png"; public static final String CHECKBOX_UNCHECKED = "icons/ui-check-box-uncheck.png"; public static final String CHECKBOX_CHECKED = "icons/ui-check-box.png"; + public static final String DISK = "icons/disk.png"; + public static final String DISKS = "icons/disks.png"; public static final String DISK_UNINITIALIZED = "icons/disk-uninitialized.png"; public static final String SEARCH = "icons/search.png"; public static final String ARROW_UP = "icons/arrow-up.png"; public static final String ARROW_DOWN = "icons/arrow-down.png"; + public static final String VOLUME_REBALANCE = "icons/volume-rebalance.png"; + public static final String DISK_MIGRATE = "icons/disk-migrate.png"; + public static final String LOW_DISK_SPACE = "icons/disk.png"; + public static final String DISK_OFFLINE = "icons/status-offline.png"; public static final String OVERLAY_OFFLINE = "icons/status-offline-small.png"; public static final String OVERLAY_ONLINE = "icons/status-online-small.png"; diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/login/LoginDialog.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/login/LoginDialog.java index 45b13a19..cc9c0385 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/login/LoginDialog.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/login/LoginDialog.java @@ -42,6 +42,7 @@ import org.eclipse.swt.widgets.Text; import com.gluster.storage.management.client.GlusterDataModelManager; import com.gluster.storage.management.client.UsersClient; import com.gluster.storage.management.client.constants.ClientConstants; +import com.gluster.storage.management.core.exceptions.GlusterRuntimeException; import com.gluster.storage.management.core.model.ConnectionDetails; import com.gluster.storage.management.gui.IImageKeys; import com.gluster.storage.management.gui.utils.GUIHelper; @@ -51,7 +52,7 @@ import com.gluster.storage.management.gui.validators.StringRequiredValidator; * Login dialog, which prompts for the user's account info, and has Login and Cancel buttons. */ public class LoginDialog extends Dialog { - + public static final int RETURN_CODE_ERROR = 2; private Text userIdText = null; private Text passwordText = null; private Button okButton; @@ -191,8 +192,16 @@ public class LoginDialog extends Dialog { UsersClient usersClient = new UsersClient(); if (usersClient.authenticate(user, password)) { - GlusterDataModelManager.getInstance().initializeModel(usersClient.getSecurityToken()); - super.okPressed(); + try { + GlusterDataModelManager.getInstance().initializeModel( + usersClient.getSecurityToken()); + super.okPressed(); + } catch (GlusterRuntimeException e) { + setReturnCode(RETURN_CODE_ERROR); + MessageDialog.openError(getShell(), "Initialization Error", e.getMessage()); + close(); + } + } else { MessageDialog.openError(getShell(), "Authentication Failed", "Invalid User ID or password"); } 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 5950bd38..ac2c19b0 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 @@ -23,6 +23,7 @@ package com.gluster.storage.management.gui.views; import java.util.List; import org.eclipse.swt.SWT; +import org.eclipse.swt.custom.CLabel; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; @@ -33,11 +34,11 @@ import org.eclipse.ui.part.ViewPart; 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.client.GlusterDataModelManager; import com.gluster.storage.management.core.model.RunningTask; import com.gluster.storage.management.core.model.Volume; import com.gluster.storage.management.core.model.Volume.VOLUME_STATUS; +import com.gluster.storage.management.gui.IImageKeys; import com.gluster.storage.management.gui.utils.GUIHelper; import com.gluster.storage.management.gui.views.details.tabcreators.PieChartViewerComposite; @@ -50,22 +51,27 @@ public class VolumesSummaryView extends ViewPart { private final FormToolkit toolkit = new FormToolkit(Display.getCurrent()); private ScrolledForm form; private EntityGroup<Volume> volumes; - + private static final String ALERTS = "Alerts"; private static final String RUNNING_TASKS = "Running Tasks"; private static final String VOLUMES_SUMMARY = "Volumes - Summary"; private static final String AVAILABILITY = "Availability"; - + /* * (non-Javadoc) * - * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite) + * @see + * org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets + * .Composite) */ + @SuppressWarnings({ "unchecked", "rawtypes" }) @Override public void createPartControl(Composite parent) { if (volumes == null) { - Object selectedObj = guiHelper.getSelectedEntity(getSite(), EntityGroup.class); - if (selectedObj != null && ((EntityGroup) selectedObj).getEntityType() == Volume.class) { + Object selectedObj = guiHelper.getSelectedEntity(getSite(), + EntityGroup.class); + if (selectedObj != null + && ((EntityGroup) selectedObj).getEntityType() == Volume.class) { volumes = (EntityGroup<Volume>) selectedObj; } } @@ -83,50 +89,74 @@ public class VolumesSummaryView extends ViewPart { } private void createAlertsSection() { - Composite section = guiHelper.createSection(form, toolkit, ALERTS, null, 1, false); - // toolkit.createLabel(section, "Any alerts related to volumes\nwill be displayed here."); + Composite section = guiHelper.createSection(form, toolkit, ALERTS, + null, 1, false); + List<Alert> alerts = GlusterDataModelManager.getInstance().getModel() + .getCluster().getAlerts(); - Cluster cluster = GlusterDataModelManager.getInstance().getModel().getCluster(); - List<Alert> alerts = cluster.getAlerts(); for (Alert alert : alerts) { - if (alert.getType() == Alert.ALERT_TYPES.DISK_USAGE_ALERT || - alert.getType() == Alert.ALERT_TYPES.OFFLINE_VOLUME_DISKS_ALERT) { - toolkit.createLabel(section, alert.getMessage()); - } + addAlertLabel(section, alert); + } + } + + private void addAlertLabel(Composite section, Alert alert) { + if (alert.getType() == Alert.ALERT_TYPES.DISK_USAGE_ALERT + || alert.getType() == Alert.ALERT_TYPES.OFFLINE_VOLUME_DISKS_ALERT) { + CLabel lblAlert = new CLabel(section, SWT.NONE); + lblAlert.setText(alert.getMessage()); + lblAlert.setImage((alert.getType() == Alert.ALERT_TYPES.DISK_USAGE_ALERT) ? guiHelper + .getImage(IImageKeys.LOW_DISK_SPACE) : guiHelper + .getImage(IImageKeys.DISK_OFFLINE)); + lblAlert.redraw(); } } private void createRunningTasksSection() { - Composite section = guiHelper.createSection(form, toolkit, RUNNING_TASKS, null, 1, false); + Composite section = guiHelper.createSection(form, toolkit, + RUNNING_TASKS, null, 1, false); - List<RunningTask> runningTasks = GlusterDataModelManager.getInstance().getModel().getCluster().getRunningTasks(); + List<RunningTask> runningTasks = GlusterDataModelManager.getInstance() + .getModel().getCluster().getRunningTasks(); 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.getTaskInfo()); + addRunningTaskLabel(section, task); + } + } + + private void addRunningTaskLabel(Composite section, RunningTask task) { + // Task related to Volumes context + if (task.getType() == RunningTask.TASK_TYPES.DISK_MIGRATE + || task.getType() == RunningTask.TASK_TYPES.VOLUME_REBALANCE) { + if (task.getStatus().isPercentageSupported()) { + // TODO Progress bar } + CLabel lblAlert = new CLabel(section, SWT.NONE); + lblAlert.setText(task.getTaskInfo()); + lblAlert.setImage((task.getType() == RunningTask.TASK_TYPES.DISK_MIGRATE) ? guiHelper + .getImage(IImageKeys.DISK_MIGRATE) : guiHelper + .getImage(IImageKeys.VOLUME_REBALANCE)); + lblAlert.redraw(); } } private void createSummarySection() { - Composite section = guiHelper.createSection(form, toolkit, AVAILABILITY, null, 2, false); - - // Cluster cluster = GlusterDataModelManager.getInstance().getModel().getCluster(); + Composite section = guiHelper.createSection(form, toolkit, + AVAILABILITY, null, 2, false); - GlusterDataModel model = GlusterDataModelManager.getInstance().getModel(); - Cluster cluster = (Cluster) model.getChildren().get(0); +// Cluster cluster = GlusterDataModelManager.getInstance().getModel() +// .getCluster(); - Double[] values = new Double[] { Double.valueOf(getVolumeCountByStatus(volumes, VOLUME_STATUS.ONLINE)), - Double.valueOf(getVolumeCountByStatus(volumes, VOLUME_STATUS.OFFLINE)) }; + Double[] values = new Double[] { + Double.valueOf(getVolumeCountByStatus(volumes, + VOLUME_STATUS.ONLINE)), + Double.valueOf(getVolumeCountByStatus(volumes, + VOLUME_STATUS.OFFLINE)) }; createStatusChart(toolkit, section, values); } @SuppressWarnings("unchecked") - private int getVolumeCountByStatus(EntityGroup<Volume> volumes, VOLUME_STATUS status) { + private int getVolumeCountByStatus(EntityGroup<Volume> volumes, + VOLUME_STATUS status) { int count = 0; for (Volume volume : (List<Volume>) volumes.getEntities()) { if (volume.getStatus() == status) { @@ -136,10 +166,11 @@ public class VolumesSummaryView extends ViewPart { return count; } - private void createStatusChart(FormToolkit toolkit, Composite section, Double[] values) { + private void createStatusChart(FormToolkit toolkit, Composite section, + Double[] values) { String[] categories = new String[] { "Online", "Offline" }; - PieChartViewerComposite chartViewerComposite = new PieChartViewerComposite(section, SWT.NONE, categories, - values); + PieChartViewerComposite chartViewerComposite = new PieChartViewerComposite( + section, SWT.NONE, categories, values); GridData data = new GridData(SWT.FILL, SWT.FILL, true, true); data.widthHint = 250; 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 index 266bd8d3..58eb4fce 100644 --- 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 @@ -29,57 +29,62 @@ public class AlertsResource { // Alert #1 Alert alert = new Alert(); alert.setId("0001"); - alert.setReference("Server1"); // Server + alert.setReference("Server1"); // Server alert.setType(Alert.ALERT_TYPES.CPU_USAGE_ALERT); - alert.setMessage(alert.getAlertType(alert.getType()) + " in server: " + alert.getReference()); + 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()); + 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.setReference("server1:sda1"); // Disk name alert.setType(Alert.ALERT_TYPES.DISK_USAGE_ALERT); - alert.setMessage(alert.getAlertType(alert.getType()) + " in volume: " + alert.getReference()); + alert.setMessage(alert.getAlertType(alert.getType()) + " in disk [" + + alert.getReference() + "]"); alerts.add(alert); - + // Alert #4 alert = new Alert(); alert.setId("0004"); - alert.setReference("Volume2"); // Volume name + alert.setReference("Volume2:server2:sda1"); // volume:[Disk 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()); + alert.setMessage(alert.getAlertType(alert.getType()) + " in volume [" + + alert.getReference().split(":")[0] + "] disk [" + + alert.getReference().split(":")[1] + ":" + + alert.getReference().split(":")[2] + "]"); alerts.add(alert); - + // Alert #5 alert = new Alert(); alert.setId("0005"); - alert.setReference("Volume2"); // Volume name + alert.setReference("Server2"); // Server name alert.setType(Alert.ALERT_TYPES.OFFLINE_SERVERS_ALERT); - alert.setMessage("server1, server2 are " + alert.getAlertType(alert.getType()) + " in volume: " + alert.getReference()); + alert.setMessage(alert.getAlertType(alert.getType()) + " [" + + alert.getReference() + "]"); alerts.add(alert); - + return new AlertListResponse(alerts); } - - public static void main(String[] args) { + + 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()); - } - */ + * // 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 2177085e..0d48cc57 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 @@ -49,48 +49,49 @@ public class RunningTaskResource { @GET @Produces(MediaType.TEXT_XML) public RunningTaskListResponse getRunningTasks() { - - RunningTaskStatus status = new RunningTaskStatus(); + + RunningTaskStatus taskStatus = new RunningTaskStatus(); List<RunningTask> runningTasks = new ArrayList<RunningTask>(); - status.setCode(Status.STATUS_CODE_RUNNING); - status.setPercentageSupported(false); + taskStatus.setCode(Status.STATUS_CODE_RUNNING); + taskStatus.setPercentageSupported(false); + // Volume rebalance RunningTask task = new RunningTask(); task.setId("0001"); 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); + task.setTaskInfo( task.getTaskType( task.getType() ) + " on [" + task.getReference() + "]"); + task.setStatus(taskStatus); runningTasks.add(task); task = new RunningTask(); task.setId("0002"); 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); + task.setTaskInfo( task.getTaskType( task.getType() ) + " on [" + task.getReference() + "]"); + task.setStatus(taskStatus); runningTasks.add(task); // MigrateDisk task = new RunningTask(); task.setId("0003"); - task.setType(RunningTask.TASK_TYPES.MIGRATE_DISK); + task.setType(RunningTask.TASK_TYPES.DISK_MIGRATE); task.setReference("Volume3:server1:sda1"); // Disk reference - task.setTaskInfo( task.getTaskType(task.getType()) + " is running in disk " + task.getReference() + ""); - task.setStatus(status); + task.setTaskInfo( task.getTaskType( task.getType() ) + " for volume [" + task.getReference().split(":")[0] + "] disk [" + task.getReference().split(":")[1] + ":" + task.getReference().split(":")[2] + "]" ) ; + task.setStatus(taskStatus); runningTasks.add(task); // FormatDisk task = new RunningTask(); task.setId("0004"); - 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); + task.setType(RunningTask.TASK_TYPES.DISK_FORMAT); + task.setReference("server1:sdb1"); // Disk reference + task.setTaskInfo( task.getTaskType( task.getType() ) + " [" + task.getReference() + "]"); + taskStatus.setPercentageSupported(true); + taskStatus.getPercentCompleted(45); + task.setStatus(taskStatus); runningTasks.add(task); return new RunningTaskListResponse(Status.STATUS_SUCCESS, runningTasks); 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 67814126..aae740e4 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 @@ -27,8 +27,6 @@ import static com.gluster.storage.management.core.constants.RESTConstants.PATH_P import static com.gluster.storage.management.core.constants.RESTConstants.RESOURCE_PATH_VOLUMES; import static com.gluster.storage.management.core.constants.RESTConstants.SUBRESOURCE_DEFAULT_OPTIONS; - -import java.util.ArrayList; import javax.ws.rs.Consumes; import javax.ws.rs.FormParam; import javax.ws.rs.GET; @@ -39,7 +37,6 @@ import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; - import com.gluster.storage.management.core.model.Status; import com.gluster.storage.management.core.model.Volume; import com.gluster.storage.management.core.response.GenericResponse; @@ -54,6 +51,7 @@ import com.sun.jersey.spi.resource.Singleton; @Singleton @Path(RESOURCE_PATH_VOLUMES) public class VolumesResource { + private final GlusterUtil glusterUtil = new GlusterUtil(); @InjectParam @@ -62,12 +60,11 @@ public class VolumesResource { @GET @Produces(MediaType.TEXT_XML) public VolumeListResponse getAllVolumes() { - ProcessResult response = glusterUtil.getVolumeInfo(); - if (response.isSuccess()) { - return new VolumeListResponse( Status.STATUS_SUCCESS, glusterUtil.getAllVolumes(response.getOutput()) ); - } else { - //TODO: log the error - return new VolumeListResponse(Status.STATUS_FAILURE, new ArrayList<Volume>()); + 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); } } |
