From 3e997efcd1f569d38b1ac7623c4e10dd35da416a Mon Sep 17 00:00:00 2001 From: Selvam Date: Wed, 30 Mar 2011 18:02:08 +0530 Subject: Alerts section in volumes summary page Volumes update in navigation tree Review comments update for Alerts & Running tasks 1. RESOURCE_NAME removed and used RESTConstants 2. fetchAlerts renamed to fetchAllAlerts 3. System.out.println removed 4. ALERT_TYPE_STR made as static and final 5. getAlertDescription renamed as getMessage 6. getTaskDescription renamed as getTaskInfo 7. getCluster method is added in GlusterDataModel 8. getRunningTasksForVolumesContext will not implemented for Volumes summary view 9. Constants added for "Availability", "Running Tasks" etc. 10. CPU_USAGE_ALERT, MEMORY_USAGE_ALERT and DISK_USAGE_ALERT are modifies and OFFLINE_VOLUME_DISKS_ALERT, OFFLINE_SERVERS_ALERT are added. 11. Two more dummy alerts added 12. Reference format changed for Disk as "volumeName:serverName:diskName" 13. TaskInfo reflects the task type 14. Method removeSpaces added as static method 15. Local constants added for package and Manager --- .../gui/dialogs/CreateVolumeDisksPage.java | 17 +++++- .../management/gui/dialogs/CreateVolumePage1.java | 13 ++++- .../management/gui/dialogs/MigrateDiskPage1.java | 2 +- .../management/gui/dialogs/SelectDisksDialog.java | 45 +++++++++++---- .../management/gui/views/VolumeDisksView.java | 4 +- .../management/gui/views/VolumesSummaryView.java | 65 +++++++++++++--------- .../details/tabcreators/VolumeTabCreator.java | 3 +- 7 files changed, 106 insertions(+), 43 deletions(-) (limited to 'src/com.gluster.storage.management.gui') diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/CreateVolumeDisksPage.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/CreateVolumeDisksPage.java index 80811226..c78601d9 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/CreateVolumeDisksPage.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/CreateVolumeDisksPage.java @@ -291,13 +291,26 @@ public class CreateVolumeDisksPage extends Composite { setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); } - + + public List getChosenDisks() { Object[] disksArr = (Object[]) chosenDisksContentProvider.getElements(dualTableViewer); if (disksArr != null) { List disks = new ArrayList(); for (Object disk : disksArr) { - disks.add((Disk) disk); + disks.add( (Disk)disk ); + } + return disks; + } + return null; + } + + public List getChosenBricks() { + Object[] disksArr = (Object[]) chosenDisksContentProvider.getElements(dualTableViewer); + if (disksArr != null) { + List disks = new ArrayList(); + for (Object disk : disksArr) { + disks.add( ((Disk)disk).getServerName() + ":" + ((Disk)disk).getName() ); // Format: Server:disk } return disks; } diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/CreateVolumePage1.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/CreateVolumePage1.java index d919fd84..b09bbb44 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/CreateVolumePage1.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/CreateVolumePage1.java @@ -18,6 +18,7 @@ *******************************************************************************/ package com.gluster.storage.management.gui.dialogs; +import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; @@ -73,7 +74,15 @@ public class CreateVolumePage1 extends WizardPage { // by default, we create volume with all available disks allDisks = GlusterDataModelManager.getInstance().getReadyDisksOfAllServers(); - volume.setDisks(allDisks); + volume.setDisks(getBricks(allDisks)); // volume.setDisks(allDisks); + } + + private List getBricks(List allDisks) { + List disks = new ArrayList(); + for(Disk disk: allDisks) { + disks.add(disk.getServerName() + ":" + disk.getName()); + } + return disks; } private class ValidationListener implements ModifyListener { @@ -206,7 +215,7 @@ public class CreateVolumePage1 extends WizardPage { dialog.create(); if(dialog.open() == Window.OK) { // user has customized disks. get them from the dialog box. - volume.setDisks(dialog.getSelectedDisks()); + volume.setDisks(dialog.getSelectedBricks()); linkCustomize.setText("" + volume.getDisks().size() + " Disk(s) (customize)"); } } diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/MigrateDiskPage1.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/MigrateDiskPage1.java index 7dc0b03d..f484a346 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/MigrateDiskPage1.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/MigrateDiskPage1.java @@ -166,7 +166,7 @@ public class MigrateDiskPage1 extends WizardPage { GlusterDummyModel glusterDummyModel = GlusterDummyModel.getInstance(); List fromDisks = glusterDummyModel.getReadyDisksOfVolume(volume); - List toDisks = glusterDummyModel.getReadyDisksOfAllServersExcluding(volume.getDisks()); + List toDisks = glusterDummyModel.getReadyDisksOfAllServersExcluding( glusterDummyModel.getReadyDisksOfVolume(volume)); TableViewer tableViewerFrom = createTableViewer(container, diskLabelProvider, fromDisks, txtFilterFrom); if(fromDisk != null) { diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/SelectDisksDialog.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/SelectDisksDialog.java index 10a36fb0..0ec19d5b 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/SelectDisksDialog.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/SelectDisksDialog.java @@ -18,6 +18,7 @@ *******************************************************************************/ package com.gluster.storage.management.gui.dialogs; +import java.util.ArrayList; import java.util.List; import org.eclipse.jface.dialogs.Dialog; @@ -47,11 +48,24 @@ public class SelectDisksDialog extends Dialog { * * @param parentShell */ - public SelectDisksDialog(Shell parentShell, List allDisks, List selectedDisks) { + public SelectDisksDialog(Shell parentShell, List allDisks, List selectedDisks) { super(parentShell); setShellStyle(getShellStyle() | SWT.RESIZE); this.allDisks = allDisks; - this.selectedDisks = selectedDisks; + this.selectedDisks = getSelectedDisks(allDisks, selectedDisks); + } + + private List getSelectedDisks(List allDisks, List selectedDisks) { + List disks = new ArrayList(); + for (String selectedDisk : selectedDisks) { + for (Disk disk : disks) { + String brick[] = selectedDisk.split(":"); + if (disk.getServerName() == brick[0] && disk.getName() == brick[1]) { + disks.add(disk); + } + } + } + return disks; } /** @@ -64,12 +78,14 @@ public class SelectDisksDialog extends Dialog { Composite container = new Composite(parent, SWT.NONE); GridLayout containerLayout = new GridLayout(2, false); container.setLayout(containerLayout); - GridData containerLayoutData = new GridData(SWT.FILL, SWT.FILL, true, true); + GridData containerLayoutData = new GridData(SWT.FILL, SWT.FILL, true, + true); container.setLayoutData(containerLayoutData); getShell().setText("Create Volume - Select Disks"); - - disksPage = new CreateVolumeDisksPage(container, SWT.NONE, allDisks, selectedDisks); + + disksPage = new CreateVolumeDisksPage(container, SWT.NONE, allDisks, + selectedDisks); return container; } @@ -81,8 +97,10 @@ public class SelectDisksDialog extends Dialog { */ @Override protected void createButtonsForButtonBar(Composite parent) { - createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, true); - createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false); + createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, + true); + createButton(parent, IDialogConstants.CANCEL_ID, + IDialogConstants.CANCEL_LABEL, false); } /** @@ -100,14 +118,19 @@ public class SelectDisksDialog extends Dialog { @Override protected void okPressed() { - if (this.getSelectedDisks().size() == 0 ) { - MessageDialog.openError(getShell(), "Select Disk(s)", "Please select atlease one disk"); + if (this.getSelectedDisks().size() == 0) { + MessageDialog.openError(getShell(), "Select Disk(s)", + "Please select atlease one disk"); } else { super.okPressed(); } } - + public List getSelectedDisks() { - return disksPage.getChosenDisks(); + return disksPage.getChosenDisks(); + } + + public List getSelectedBricks() { + return disksPage.getChosenBricks(); } } diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/VolumeDisksView.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/VolumeDisksView.java index cbf6736b..57065928 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/VolumeDisksView.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/VolumeDisksView.java @@ -4,6 +4,8 @@ import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite; import org.eclipse.ui.part.ViewPart; +import com.gluster.storage.management.client.GlusterDataModelManager; +import com.gluster.storage.management.core.model.GlusterDataModel; import com.gluster.storage.management.core.model.Volume; import com.gluster.storage.management.gui.utils.GUIHelper; import com.gluster.storage.management.gui.views.details.DisksPage; @@ -27,7 +29,7 @@ public class VolumeDisksView extends ViewPart { * @param parent */ private void createPage(Composite parent) { - page = new DisksPage(parent, SWT.NONE, getSite(), volume.getDisks()); + page = new DisksPage(parent, SWT.NONE, getSite(), GlusterDataModelManager.getInstance().getReadyDisksOfVolume(volume)); parent.layout(); // IMP: lays out the form properly } 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..72987d0a 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; @@ -50,7 +52,12 @@ public class VolumesSummaryView extends ViewPart { private final FormToolkit toolkit = new FormToolkit(Display.getCurrent()); private ScrolledForm form; private EntityGroup 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) * @@ -61,55 +68,63 @@ 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)selectedObj; + volumes = (EntityGroup) selectedObj; } } - + createSections(parent); } private void createSections(Composite parent) { - form = guiHelper.setupForm(parent, toolkit, "Volumes - Summary"); + form = guiHelper.setupForm(parent, toolkit, VOLUMES_SUMMARY); 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."); - toolkit.createLabel(section, "Any alerts related to volumes\nwill be displayed here."); + Cluster cluster = GlusterDataModelManager.getInstance().getModel().getCluster(); + List 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()); + } + } } 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) - - List runningTasks = cluster.getRunningTasks(); - String taskMessage = ""; - for(RunningTask task : runningTasks) { - if (task.getStatus().isPercentageSupported()) { - //TODO Progress bar + Composite section = guiHelper.createSection(form, toolkit, RUNNING_TASKS, null, 1, false); + + List 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()); } - //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); + Composite section = guiHelper.createSection(form, toolkit, AVAILABILITY, null, 2, false); + + // Cluster cluster = GlusterDataModelManager.getInstance().getModel().getCluster(); 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 volumes, VOLUME_STATUS status) { int count = 0; for (Volume volume : (List) volumes.getEntities()) { @@ -130,7 +145,7 @@ public class VolumesSummaryView extends ViewPart { data.heightHint = 250; chartViewerComposite.setLayoutData(data); } - + /* * (non-Javadoc) * diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/details/tabcreators/VolumeTabCreator.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/details/tabcreators/VolumeTabCreator.java index 3e5382cc..7f78829e 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/details/tabcreators/VolumeTabCreator.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/details/tabcreators/VolumeTabCreator.java @@ -34,6 +34,7 @@ import org.eclipse.ui.forms.widgets.FormToolkit; import org.eclipse.ui.forms.widgets.Hyperlink; import org.eclipse.ui.forms.widgets.ScrolledForm; +import com.gluster.storage.management.client.GlusterDataModelManager; import com.gluster.storage.management.core.model.Entity; import com.gluster.storage.management.core.model.Volume; import com.gluster.storage.management.core.model.Volume.NAS_PROTOCOL; @@ -247,7 +248,7 @@ public class VolumeTabCreator implements TabCreator { private void createVolumeDisksTab(Volume volume, TabFolder tabFolder, FormToolkit toolkit, IWorkbenchSite site) { Composite volumeDisksTab = guiHelper.createTab(tabFolder, "Disks", IImageKeys.VOLUME); - DisksPage page = new DisksPage(volumeDisksTab, SWT.NONE, site, volume.getDisks()); + DisksPage page = new DisksPage(volumeDisksTab, SWT.NONE, site, GlusterDataModelManager.getInstance().getReadyDisksOfVolume(volume)); volumeDisksTab.layout(); // IMP: lays out the form properly } -- cgit