From 33497bdfc4ac6b8bb12ad60d9e8d489b875b4619 Mon Sep 17 00:00:00 2001 From: selvam Date: Wed, 8 Jun 2011 14:15:40 +0530 Subject: Bug #2877 Using short cut key for resetting volume options selects irrelevant volume - fix --- .../gui/actions/ResetVolumeOptionsAction.java | 48 +++++++++++++--------- .../storage/management/gui/utils/GUIHelper.java | 4 +- 2 files changed, 31 insertions(+), 21 deletions(-) (limited to 'src') diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/ResetVolumeOptionsAction.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/ResetVolumeOptionsAction.java index 5182d25f..1ef35352 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/ResetVolumeOptionsAction.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/ResetVolumeOptionsAction.java @@ -2,6 +2,7 @@ package com.gluster.storage.management.gui.actions; import org.eclipse.jface.action.IAction; import org.eclipse.jface.viewers.ISelection; +import org.eclipse.swt.widgets.Display; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.IWorkbenchWindowActionDelegate; @@ -10,6 +11,7 @@ import com.gluster.storage.management.client.VolumesClient; import com.gluster.storage.management.core.model.Status; import com.gluster.storage.management.core.model.Volume; import com.gluster.storage.management.core.model.Volume.VOLUME_STATUS; +import com.gluster.storage.management.gui.utils.GUIHelper; public class ResetVolumeOptionsAction extends AbstractActionDelegate { private Volume volume; @@ -22,23 +24,29 @@ public class ResetVolumeOptionsAction extends AbstractActionDelegate { } @Override - protected void performAction(IAction action) { - final String actionDesc = action.getDescription(); + protected void performAction(final IAction action) { + Display.getDefault().asyncExec(new Runnable() { - boolean confirmed = showConfirmDialog(actionDesc, - "Are you sure you want to reset all options of the volume [" + volume.getName() + "] ?"); - if (!confirmed) { - return; - } + @Override + public void run() { + final String actionDesc = action.getDescription(); - final Status status = resetVolumeOptions(); - if (status.isSuccess()) { - showInfoDialog(actionDesc, "Volume options for [" + volume.getName() + "] reset successfully!"); - modelManager.resetVolumeOptions(volume); - } else { - showErrorDialog(actionDesc, "Volume options for [" + volume.getName() + "] could not be reset! Error: [" + status - + "]"); - } + boolean confirmed = showConfirmDialog(actionDesc, + "Are you sure you want to reset all options of the volume [" + volume.getName() + "] ?"); + if (!confirmed) { + return; + } + + final Status status = resetVolumeOptions(); + if (status.isSuccess()) { + showInfoDialog(actionDesc, "Volume options for [" + volume.getName() + "] reset successfully!"); + modelManager.resetVolumeOptions(volume); + } else { + showErrorDialog(actionDesc, "Volume options for [" + volume.getName() + + "] could not be reset! Error: [" + status + "]"); + } + } + }); } private Status resetVolumeOptions() { @@ -54,11 +62,13 @@ public class ResetVolumeOptionsAction extends AbstractActionDelegate { */ @Override public void selectionChanged(IAction action, ISelection selection) { - super.selectionChanged(action, selection); - - if (selectedEntity instanceof Volume) { - volume = (Volume) selectedEntity; + volume = GUIHelper.getInstance().getSelectedEntity(getWindow(), Volume.class); + + if (volume instanceof Volume) { + //showInfoDialog("Debug", volume.getName()); action.setEnabled(volume.getOptions().size() > 0); + } else { + action.setEnabled(false); } } } diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/utils/GUIHelper.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/utils/GUIHelper.java index d08030be..56a6c94b 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/utils/GUIHelper.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/utils/GUIHelper.java @@ -363,14 +363,14 @@ public class GUIHelper { } @SuppressWarnings({ "unchecked", "rawtypes" }) - public Object getSelectedEntity(IWorkbenchWindow window, Class expectedType) { + public T getSelectedEntity(IWorkbenchWindow window, Class expectedType) { ISelection selection = window.getSelectionService().getSelection(NavigationView.ID); if (selection instanceof IStructuredSelection) { Iterator iter = ((IStructuredSelection) selection).iterator(); while (iter.hasNext()) { Object selectedObj = iter.next(); if (selectedObj.getClass() == expectedType) { - return selectedObj; + return (T)selectedObj; } } } -- cgit From ab5f1bd8d12c2d99b0b10a146917c88313d0a7d0 Mon Sep 17 00:00:00 2001 From: selvam Date: Wed, 8 Jun 2011 14:15:40 +0530 Subject: Bug #2877 Using short cut key for resetting volume options selects irrelevant volume - fix --- .../gluster/storage/management/gui/actions/ResetVolumeOptionsAction.java | 1 - 1 file changed, 1 deletion(-) (limited to 'src') diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/ResetVolumeOptionsAction.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/ResetVolumeOptionsAction.java index 1ef35352..f23f3b15 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/ResetVolumeOptionsAction.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/ResetVolumeOptionsAction.java @@ -65,7 +65,6 @@ public class ResetVolumeOptionsAction extends AbstractActionDelegate { volume = GUIHelper.getInstance().getSelectedEntity(getWindow(), Volume.class); if (volume instanceof Volume) { - //showInfoDialog("Debug", volume.getName()); action.setEnabled(volume.getOptions().size() > 0); } else { action.setEnabled(false); -- cgit From 496de472cc1f05d48be81554dd6d66224bbb33ea Mon Sep 17 00:00:00 2001 From: Dhandapani Date: Wed, 8 Jun 2011 15:02:39 +0530 Subject: Bug 2838 - Stop Volume popup by default focused on "Yes" button --- .../management/gui/actions/DeleteVolumeAction.java | 91 ++++++++++++---------- .../management/gui/actions/RemoveDiskAction.java | 70 ++++++++++------- .../management/gui/actions/StopVolumeAction.java | 50 +++++++----- 3 files changed, 121 insertions(+), 90 deletions(-) (limited to 'src') diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/DeleteVolumeAction.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/DeleteVolumeAction.java index 41ebbca7..9222c6c7 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/DeleteVolumeAction.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/DeleteVolumeAction.java @@ -21,6 +21,7 @@ package com.gluster.storage.management.gui.actions; import org.eclipse.jface.action.IAction; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.viewers.ISelection; +import org.eclipse.swt.widgets.Display; import com.gluster.storage.management.client.GlusterDataModelManager; import com.gluster.storage.management.client.VolumesClient; @@ -35,53 +36,61 @@ public class DeleteVolumeAction extends AbstractActionDelegate { private GlusterDataModelManager modelManager = GlusterDataModelManager.getInstance(); @Override - protected void performAction(IAction action) { - final String actionDesc = action.getDescription(); + protected void performAction(final IAction action) { - String warningMessage; - if (volume.getStatus() == VOLUME_STATUS.OFFLINE) { - warningMessage = "Are you sure to delete the Volume[" + volume.getName() + "] ?"; - } else { - warningMessage = "Volume [" + volume.getName() + "] is online, \nAre you sure to continue?"; - } + Display.getDefault().asyncExec(new Runnable() { - Integer deleteOption = new MessageDialog(getShell(), "Delete Volume", GUIHelper.getInstance().getImage( - IImageKeys.VOLUME), warningMessage, MessageDialog.QUESTION, new String[] { "Cancel", - "Delete volume and data", "Delete volume, keep data" }, 2).open(); - if (deleteOption <= 0) { // By Cancel button(0) or Escape key(-1) - return; - } + @Override + public void run() { - VolumesClient client = new VolumesClient(); + final String actionDesc = action.getDescription(); - Status status; - if (volume.getStatus() == VOLUME_STATUS.ONLINE) { // To stop the volume service, if running - status = client.stopVolume(volume.getName()); - if (!status.isSuccess()) { - showErrorDialog(actionDesc, "Volume [" + volume.getName() + "] could not be stopped! Error: [" + status - + "]"); - return; - } - } - - boolean confirmDelete = false; - if (deleteOption == 1) { - confirmDelete = true; - } + String warningMessage; + if (volume.getStatus() == VOLUME_STATUS.OFFLINE) { + warningMessage = "Are you sure to delete the Volume[" + volume.getName() + "] ?"; + } else { + warningMessage = "Volume [" + volume.getName() + "] is online, \nAre you sure to continue?"; + } - status = client.deleteVolume(volume, confirmDelete); - if (status.isSuccess()) { - showInfoDialog(actionDesc, "Volume [" + volume.getName() + "] deleted successfully!"); - modelManager.deleteVolume(volume); - } else { - if (status.isPartSuccess()) { - showWarningDialog(actionDesc, "Volume deleted, but following error(s) occured: " + status); - modelManager.deleteVolume(volume); - } else { - showErrorDialog(actionDesc, - "Volume [" + volume.getName() + "] could not be deleted! Error: [" + status + "]"); + Integer deleteOption = new MessageDialog(getShell(), "Delete Volume", GUIHelper.getInstance().getImage( + IImageKeys.VOLUME), warningMessage, MessageDialog.QUESTION, new String[] { "Cancel", + "Delete volume and data", "Delete volume, keep data" }, -1).open(); + if (deleteOption <= 0) { // By Cancel button(0) or Escape key(-1) + return; + } + + VolumesClient client = new VolumesClient(); + + Status status; + if (volume.getStatus() == VOLUME_STATUS.ONLINE) { // To stop the volume service, if running + status = client.stopVolume(volume.getName()); + if (!status.isSuccess()) { + showErrorDialog(actionDesc, "Volume [" + volume.getName() + "] could not be stopped! Error: [" + + status + "]"); + return; + } + } + + boolean confirmDelete = false; + if (deleteOption == 1) { + confirmDelete = true; + } + + status = client.deleteVolume(volume, confirmDelete); + if (status.isSuccess()) { + showInfoDialog(actionDesc, "Volume [" + volume.getName() + "] deleted successfully!"); + modelManager.deleteVolume(volume); + } else { + if (status.isPartSuccess()) { + showWarningDialog(actionDesc, "Volume deleted, but following error(s) occured: " + status); + modelManager.deleteVolume(volume); + } else { + showErrorDialog(actionDesc, "Volume [" + volume.getName() + "] could not be deleted! Error: [" + + status + "]"); + } + } } - } + }); } @Override diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/RemoveDiskAction.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/RemoveDiskAction.java index 8c5d8405..ffe2469d 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/RemoveDiskAction.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/RemoveDiskAction.java @@ -30,39 +30,49 @@ public class RemoveDiskAction extends AbstractActionDelegate { boolean confirmDelete = false; @Override - protected void performAction(IAction action) { - final String actionDesc = action.getDescription(); - List brickList = getBrickList(bricks); - Integer deleteOption = new MessageDialog(getShell(), "Remove Bricks(s)", GUIHelper.getInstance().getImage( - IImageKeys.VOLUME), "Are you sure you want to remove following bricks from volume [" + volume.getName() - + "] ? \n" + StringUtil.ListToString(brickList, ", "), MessageDialog.QUESTION, new String[] { "Cancel", - "Remove bricks, delete data", "Remove bricks, keep data" }, 2).open(); - if (deleteOption <= 0) { // By Cancel button(0) or Escape key(-1) - return; - } + protected void performAction(final IAction action) { + Display.getDefault().asyncExec(new Runnable() { - if (deleteOption == 1) { - confirmDelete = true; - } - BusyIndicator.showWhile(Display.getDefault(), new Runnable() { + @Override public void run() { - VolumesClient client = new VolumesClient(); - Status status = client.removeBricks(volume.getName(), bricks, confirmDelete); - - if (status.isSuccess()) { - - // Remove the bricks from the volume object - for (Brick brick : bricks) { - volume.removeBrick(brick); - } - // Update model with removed bricks in the volume - modelManager.removeBricks(volume, bricks); - - showInfoDialog(actionDesc, "Volume [" + volume.getName() + "] bricks(s) removed successfully!"); - } else { - showErrorDialog(actionDesc, "Volume [" + volume.getName() - + "] bricks(s) could not be removed! Error: [" + status + "]"); + + final String actionDesc = action.getDescription(); + List brickList = getBrickList(bricks); + Integer deleteOption = new MessageDialog(getShell(), "Remove Bricks(s)", GUIHelper.getInstance() + .getImage(IImageKeys.VOLUME), "Are you sure you want to remove following bricks from volume [" + + volume.getName() + "] ? \n" + StringUtil.ListToString(brickList, ", "), + MessageDialog.QUESTION, new String[] { "Cancel", "Remove bricks, delete data", + "Remove bricks, keep data" }, -1).open(); + if (deleteOption <= 0) { // By Cancel button(0) or Escape key(-1) + return; + } + + if (deleteOption == 1) { + confirmDelete = true; } + BusyIndicator.showWhile(Display.getDefault(), new Runnable() { + public void run() { + VolumesClient client = new VolumesClient(); + Status status = client.removeBricks(volume.getName(), bricks, confirmDelete); + + if (status.isSuccess()) { + + // Remove the bricks from the volume object + for (Brick brick : bricks) { + volume.removeBrick(brick); + } + // Update model with removed bricks in the volume + modelManager.removeBricks(volume, bricks); + + showInfoDialog(actionDesc, "Volume [" + volume.getName() + + "] bricks(s) removed successfully!"); + } else { + showErrorDialog(actionDesc, "Volume [" + volume.getName() + + "] bricks(s) could not be removed! Error: [" + status + "]"); + } + } + }); + } }); diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/StopVolumeAction.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/StopVolumeAction.java index 33d12ce3..68623aaf 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/StopVolumeAction.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/StopVolumeAction.java @@ -19,40 +19,52 @@ package com.gluster.storage.management.gui.actions; import org.eclipse.jface.action.IAction; +import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.viewers.ISelection; +import org.eclipse.swt.widgets.Display; import com.gluster.storage.management.client.GlusterDataModelManager; import com.gluster.storage.management.client.VolumesClient; import com.gluster.storage.management.core.model.Status; 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; public class StopVolumeAction extends AbstractActionDelegate { private Volume volume; private GlusterDataModelManager modelManager = GlusterDataModelManager.getInstance(); @Override - protected void performAction(IAction action) { - final String actionDesc = action.getDescription(); - if (volume.getStatus() == VOLUME_STATUS.OFFLINE) { - showWarningDialog(actionDesc, "Volume [" + volume.getName() + "] is already offline!"); - return; // Volume already offline. Don't do anything. - } + protected void performAction(final IAction action) { + Display.getDefault().asyncExec(new Runnable() { - boolean confirmed = showConfirmDialog(actionDesc, - "Are you sure you want to stop the volume [" + volume.getName() + "] ?"); - if (!confirmed) { - return; - } + @Override + public void run() { + final String actionDesc = action.getDescription(); + if (volume.getStatus() == VOLUME_STATUS.OFFLINE) { + showWarningDialog(actionDesc, "Volume [" + volume.getName() + "] is already offline!"); + return; // Volume already offline. Don't do anything. + } - final Status status = stopVolume(); - if (status.isSuccess()) { - showInfoDialog(actionDesc, "Volume [" + volume.getName() + "] stopped successfully!"); - modelManager.updateVolumeStatus(volume, VOLUME_STATUS.OFFLINE); - } else { - showErrorDialog(actionDesc, "Volume [" + volume.getName() + "] could not be stopped! Error: [" + status - + "]"); - } + Integer deleteOption = new MessageDialog(getShell(), "Stop Volume", GUIHelper.getInstance().getImage( + IImageKeys.VOLUME), "Are you sure you want to stop the volume [" + volume.getName() + "] ?", + MessageDialog.QUESTION, new String[] { "No", "Yes" }, -1).open(); + + if (deleteOption <= 0) { + return; + } + + final Status status = stopVolume(); + if (status.isSuccess()) { + showInfoDialog(actionDesc, "Volume [" + volume.getName() + "] stopped successfully!"); + modelManager.updateVolumeStatus(volume, VOLUME_STATUS.OFFLINE); + } else { + showErrorDialog(actionDesc, "Volume [" + volume.getName() + "] could not be stopped! Error: [" + + status + "]"); + } + } + }); } private Status stopVolume() { -- cgit From 5473e451ac480fb3dd2705b4c499172e7439e7fb Mon Sep 17 00:00:00 2001 From: Shireesh Anjal Date: Wed, 8 Jun 2011 16:47:11 +0530 Subject: add/remove servers --- .../storage/management/client/UsersClient.java | 3 ++ .../storage/management/core/utils/JavaUtil.java | 41 +++++++++++++++ src/com.gluster.storage.management.gui/plugin.xml | 43 +++------------- .../management/gui/actions/AddServerAction.java | 14 ++--- .../management/gui/actions/RemoveServerAction.java | 12 +++++ .../storage/management/gui/utils/GUIHelper.java | 34 +++++++++++- .../management/gui/views/GlusterServersView.java | 2 +- .../gui/views/details/GlusterServersPage.java | 59 ++++++++++++++------- .../management/gui/views/pages/ServersPage.java | 60 +++++++++++++++------- .../server/resources/GlusterServersResource.java | 19 +++++++ 10 files changed, 202 insertions(+), 85 deletions(-) create mode 100644 src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/utils/JavaUtil.java (limited to 'src') diff --git a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/UsersClient.java b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/UsersClient.java index 25ba6b10..3d2310ac 100644 --- a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/UsersClient.java +++ b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/UsersClient.java @@ -58,6 +58,9 @@ public class UsersClient extends AbstractClient { throw e; } } catch (Exception e) { + // authentication failed. clear security token. + setSecurityToken(null); + Throwable cause = e.getCause(); if(cause != null && cause instanceof ConnectException) { return new Status(Status.STATUS_CODE_FAILURE, "Couldn't connect to Gluster Management Gateway!"); diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/utils/JavaUtil.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/utils/JavaUtil.java new file mode 100644 index 00000000..fe2fc860 --- /dev/null +++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/utils/JavaUtil.java @@ -0,0 +1,41 @@ +/******************************************************************************* + * Copyright (c) 2011 Gluster, Inc. + * This file is part of Gluster Management Console. + * + * Gluster Management Console is free software; you can redistribute it and/or + * modify it under the terms of the GNU Affero General Public License as published + * by the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * Gluster Management Console is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License + * for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * . + *******************************************************************************/ +package com.gluster.storage.management.core.utils; + +import java.util.List; + +/** + * + */ +public class JavaUtil { + @SuppressWarnings("rawtypes") + public static boolean listsDiffer(List list1, List list2) { + if(list1.size() != list2.size()) { + return true; + } + + for(Object obj : list1) { + if(!list2.contains(obj)) { + return true; + } + } + + return false; + } +} diff --git a/src/com.gluster.storage.management.gui/plugin.xml b/src/com.gluster.storage.management.gui/plugin.xml index 82b7f3e0..89b2460b 100644 --- a/src/com.gluster.storage.management.gui/plugin.xml +++ b/src/com.gluster.storage.management.gui/plugin.xml @@ -666,22 +666,6 @@ toolbarPath="Normal" tooltip="Create a new Volume"> - - @@ -711,22 +695,6 @@ toolbarPath="Normal" tooltip="Remove Server(s)"> - - selectedServers = GUIHelper.getInstance().getSelectedEntities(getWindow(), Server.class); + if (selectedServers == null || selectedServers.isEmpty()) { + action.setEnabled(false); + } else { action.setEnabled(true); - if (selectedEntity instanceof EntityGroup && ((EntityGroup) selectedEntity).getEntityType() == Volume.class) { - action.setEnabled(false); - } } } } diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/RemoveServerAction.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/RemoveServerAction.java index c7e437e8..0ca5627c 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/RemoveServerAction.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/RemoveServerAction.java @@ -27,6 +27,7 @@ import java.util.Map.Entry; import java.util.Set; import org.eclipse.jface.action.IAction; +import org.eclipse.jface.viewers.ISelection; import org.eclipse.swt.widgets.Display; import com.gluster.storage.management.client.GlusterDataModelManager; @@ -147,4 +148,15 @@ public class RemoveServerAction extends AbstractActionDelegate { public void dispose() { } + + @Override + public void selectionChanged(IAction action, ISelection selection) { + Set selectedServers = GUIHelper.getInstance().getSelectedEntities(getWindow(), + GlusterServer.class); + if(selectedServers == null || selectedServers.isEmpty()) { + action.setEnabled(false); + } else { + action.setEnabled(true); + } + } } diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/utils/GUIHelper.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/utils/GUIHelper.java index 56a6c94b..a38c6b38 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/utils/GUIHelper.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/utils/GUIHelper.java @@ -18,8 +18,10 @@ *******************************************************************************/ package com.gluster.storage.management.gui.utils; +import java.util.Arrays; import java.util.HashSet; import java.util.Iterator; +import java.util.List; import java.util.Set; import org.eclipse.jface.action.Action; @@ -30,11 +32,17 @@ import org.eclipse.jface.fieldassist.ControlDecoration; import org.eclipse.jface.fieldassist.FieldDecorationRegistry; import org.eclipse.jface.layout.TableColumnLayout; import org.eclipse.jface.resource.ImageDescriptor; +import org.eclipse.jface.viewers.CheckStateChangedEvent; +import org.eclipse.jface.viewers.CheckboxTableViewer; import org.eclipse.jface.viewers.ColumnLabelProvider; import org.eclipse.jface.viewers.ColumnLayoutData; import org.eclipse.jface.viewers.ColumnWeightData; +import org.eclipse.jface.viewers.ICheckStateListener; import org.eclipse.jface.viewers.ISelection; +import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.jface.viewers.SelectionChangedEvent; +import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.jface.viewers.StructuredViewer; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.TableViewerColumn; @@ -72,6 +80,7 @@ import org.eclipse.ui.progress.IProgressConstants; import com.gluster.storage.management.core.exceptions.GlusterRuntimeException; import com.gluster.storage.management.core.model.Disk; +import com.gluster.storage.management.core.utils.JavaUtil; import com.gluster.storage.management.gui.Application; import com.gluster.storage.management.gui.IImageKeys; import com.gluster.storage.management.gui.views.NavigationView; @@ -406,7 +415,30 @@ public class GUIHelper { } return selectedEntities; } - + + public void configureCheckboxTableViewer(final CheckboxTableViewer tableViewer) { + tableViewer.addCheckStateListener(new ICheckStateListener() { + + @Override + public void checkStateChanged(CheckStateChangedEvent event) { + tableViewer.setSelection(new StructuredSelection(tableViewer.getCheckedElements())); + } + }); + + tableViewer.addSelectionChangedListener(new ISelectionChangedListener() { + + @SuppressWarnings("unchecked") + @Override + public void selectionChanged(SelectionChangedEvent event) { + List checkedElements = Arrays.asList(tableViewer.getCheckedElements()); + List selectedElements = ((IStructuredSelection)event.getSelection()).toList(); + + if (JavaUtil.listsDiffer(checkedElements, selectedElements)) { + tableViewer.setSelection(new StructuredSelection(tableViewer.getCheckedElements())); + } + } + }); + } public void showProgressView() { try { diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/GlusterServersView.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/GlusterServersView.java index 06b1e282..fa9c2e7f 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/GlusterServersView.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/GlusterServersView.java @@ -52,7 +52,7 @@ public class GlusterServersView extends ViewPart implements IDoubleClickListener servers = (EntityGroup)guiHelper.getSelectedEntity(getSite(), EntityGroup.class); } - page = new GlusterServersPage(parent, SWT.NONE, servers); + page = new GlusterServersPage(getSite(), parent, SWT.NONE, servers); page.addDoubleClickListener(this); } diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/details/GlusterServersPage.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/details/GlusterServersPage.java index c9fab9e0..36f60998 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/details/GlusterServersPage.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/details/GlusterServersPage.java @@ -19,13 +19,9 @@ package com.gluster.storage.management.gui.views.details; import org.eclipse.jface.layout.TableColumnLayout; -import org.eclipse.jface.viewers.CheckStateChangedEvent; import org.eclipse.jface.viewers.CheckboxTableViewer; import org.eclipse.jface.viewers.ColumnWeightData; -import org.eclipse.jface.viewers.ICheckStateListener; import org.eclipse.jface.viewers.IDoubleClickListener; -import org.eclipse.jface.viewers.StructuredSelection; -import org.eclipse.jface.viewers.TableViewer; import org.eclipse.swt.SWT; import org.eclipse.swt.events.DisposeEvent; import org.eclipse.swt.events.DisposeListener; @@ -39,9 +35,14 @@ import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import org.eclipse.swt.widgets.Text; +import org.eclipse.ui.IWorkbenchSite; import org.eclipse.ui.forms.widgets.FormToolkit; +import com.gluster.storage.management.client.GlusterDataModelManager; +import com.gluster.storage.management.core.model.ClusterListener; +import com.gluster.storage.management.core.model.DefaultClusterListener; import com.gluster.storage.management.core.model.EntityGroup; +import com.gluster.storage.management.core.model.Event; import com.gluster.storage.management.core.model.GlusterServer; import com.gluster.storage.management.gui.EntityGroupContentProvider; import com.gluster.storage.management.gui.GlusterServerTableLabelProvider; @@ -60,28 +61,23 @@ public class GlusterServersPage extends Composite { private static final String[] GLUSTER_SERVER_TABLE_COLUMN_NAMES = new String[] { "Name", "IP Address(es)", "Number\nof CPUs", "Total\nMemory (GB)", "Space (GB)", "Space\nAvailable (GB)", "Status" }; // Removed "Preferred\nNetwork", - public GlusterServersPage(Composite parent, int style) { + public GlusterServersPage(IWorkbenchSite site, final Composite parent, int style, EntityGroup servers) { super(parent, style); - addDisposeListener(new DisposeListener() { - public void widgetDisposed(DisposeEvent e) { - toolkit.dispose(); - } - }); toolkit.adapt(this); toolkit.paintBordersFor(this); setupPageLayout(); Text filterText = guiHelper.createFilterText(toolkit, this); - setupServerTableViewer(filterText); - } - - public GlusterServersPage(final Composite parent, int style, EntityGroup servers) { - this(parent, style); + setupServerTableViewer(site, filterText); tableViewer.setInput(servers); parent.layout(); // Important - this actually paints the table + createListeners(parent); + } + + private void createListeners(final Composite parent) { /** * Ideally not required. However the table viewer is not getting laid out properly on performing * "maximize + restore" So this is a hack to make sure that the table is laid out again on re-size of the window @@ -94,11 +90,31 @@ public class GlusterServersPage extends Composite { } }); - tableViewer.addCheckStateListener(new ICheckStateListener() { + final ClusterListener clusterListener = new DefaultClusterListener() { + + @Override + public void serverAdded(GlusterServer server) { + tableViewer.refresh(); + } @Override - public void checkStateChanged(CheckStateChangedEvent event) { - tableViewer.setSelection(new StructuredSelection(tableViewer.getCheckedElements())); + public void serverRemoved(GlusterServer server) { + tableViewer.refresh(); + } + + @Override + public void serverChanged(GlusterServer server, Event event) { + tableViewer.update(server, null); + } + }; + + final GlusterDataModelManager modelManager = GlusterDataModelManager.getInstance(); + modelManager.addClusterListener(clusterListener); + + addDisposeListener(new DisposeListener() { + public void widgetDisposed(DisposeEvent e) { + toolkit.dispose(); + modelManager.removeClusterListener(clusterListener); } }); } @@ -151,9 +167,14 @@ public class GlusterServersPage extends Composite { return tableViewerComposite; } - private void setupServerTableViewer(final Text filterText) { + private void setupServerTableViewer(IWorkbenchSite site, final Text filterText) { Composite tableViewerComposite = createTableViewerComposite(); tableViewer = createServerTableViewer(tableViewerComposite); + site.setSelectionProvider(tableViewer); + + // make sure that table selection is driven by checkbox selection + guiHelper.configureCheckboxTableViewer(tableViewer); + // Create a case insensitive filter for the table viewer using the filter text field guiHelper.createFilter(tableViewer, filterText, false); } diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/ServersPage.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/ServersPage.java index 5a6a9d40..20c3cbd4 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/ServersPage.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/ServersPage.java @@ -1,4 +1,4 @@ -/******************************************************************************* + /******************************************************************************* * Copyright (c) 2011 Gluster, Inc. * This file is part of Gluster Management Console. * @@ -18,17 +18,10 @@ *******************************************************************************/ package com.gluster.storage.management.gui.views.pages; -import java.util.ArrayList; -import java.util.List; - import org.eclipse.jface.layout.TableColumnLayout; -import org.eclipse.jface.viewers.CheckStateChangedEvent; import org.eclipse.jface.viewers.CheckboxTableViewer; import org.eclipse.jface.viewers.ColumnWeightData; -import org.eclipse.jface.viewers.ICheckStateListener; import org.eclipse.jface.viewers.IDoubleClickListener; -import org.eclipse.jface.viewers.StructuredSelection; -import org.eclipse.jface.viewers.TableViewer; import org.eclipse.swt.SWT; import org.eclipse.swt.events.DisposeEvent; import org.eclipse.swt.events.DisposeListener; @@ -45,7 +38,9 @@ import org.eclipse.swt.widgets.Text; import org.eclipse.ui.IWorkbenchSite; import org.eclipse.ui.forms.widgets.FormToolkit; -import com.gluster.storage.management.core.model.Entity; +import com.gluster.storage.management.client.GlusterDataModelManager; +import com.gluster.storage.management.core.model.ClusterListener; +import com.gluster.storage.management.core.model.DefaultClusterListener; import com.gluster.storage.management.core.model.EntityGroup; import com.gluster.storage.management.core.model.Server; import com.gluster.storage.management.gui.EntityGroupContentProvider; @@ -55,7 +50,7 @@ import com.gluster.storage.management.gui.utils.GUIHelper; public class ServersPage extends Composite { private final FormToolkit toolkit = new FormToolkit(Display.getCurrent()); - private TableViewer tableViewer; + private CheckboxTableViewer tableViewer; private GUIHelper guiHelper = GUIHelper.getInstance(); public enum SERVER_TABLE_COLUMN_INDICES { @@ -88,6 +83,10 @@ public class ServersPage extends Composite { setupPage(site, servers); parent.layout(); // Important - this actually paints the table + createListeners(parent); + } + + private void createListeners(final Composite parent) { /** * Ideally not required. However the table viewer is not getting laid out properly on performing * "maximize + restore" So this is a hack to make sure that the table is laid out again on re-size of the window @@ -99,6 +98,33 @@ public class ServersPage extends Composite { parent.layout(); } }); + + final ClusterListener clusterListener = new DefaultClusterListener() { + @Override + public void discoveredServerRemoved(Server server) { + refreshViewer(); + } + + @Override + public void discoveredServerAdded(Server server) { + refreshViewer(); + } + + private void refreshViewer() { + tableViewer.refresh(); + parent.update(); + } + }; + + final GlusterDataModelManager modelManager = GlusterDataModelManager.getInstance(); + modelManager.addClusterListener(clusterListener); + addDisposeListener(new DisposeListener() { + @Override + public void widgetDisposed(DisposeEvent e) { + toolkit.dispose(); + modelManager.removeClusterListener(clusterListener); + } + }); } public void setInput(EntityGroup servers) { @@ -135,21 +161,17 @@ public class ServersPage extends Composite { // setColumnProperties(table, SERVER_DISK_TABLE_COLUMN_INDICES.DISK_SPACE_IN_USE, SWT.CENTER, 90); } - private TableViewer createServerTableViewer(Composite parent) { + private CheckboxTableViewer createServerTableViewer(Composite parent) { final CheckboxTableViewer tableViewer = CheckboxTableViewer.newCheckList(parent, SWT.FLAT | SWT.FULL_SELECTION | SWT.MULTI); // TableViewer tableViewer = new TableViewer(parent, SWT.FLAT | SWT.FULL_SELECTION | SWT.MULTI); tableViewer.setLabelProvider(new ServerTableLabelProvider()); tableViewer.setContentProvider(new EntityGroupContentProvider()); setupServerTable(parent, tableViewer.getTable()); - - tableViewer.addCheckStateListener(new ICheckStateListener() { - - @Override - public void checkStateChanged(CheckStateChangedEvent event) { - tableViewer.setSelection(new StructuredSelection(tableViewer.getCheckedElements())); - } - }); + + // make sure that table selection is driven by checkbox selection + guiHelper.configureCheckboxTableViewer(tableViewer); + return tableViewer; } 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 728da2dc..27f0829b 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 @@ -227,6 +227,16 @@ public class GlusterServersResource extends AbstractServersResource { @Produces(MediaType.TEXT_XML) public GlusterServerResponse addServer(@PathParam(PATH_PARAM_CLUSTER_NAME) String clusterName, @FormParam(FORM_PARAM_SERVER_NAME) String serverName) { + if(clusterName.isEmpty()) { + return new GlusterServerResponse( + new Status(Status.STATUS_CODE_FAILURE, "Cluster name should not be empty!"), null); + } + + if(serverName == null || serverName.isEmpty()) { + return new GlusterServerResponse(new Status(Status.STATUS_CODE_FAILURE, "Form parameter [" + + FORM_PARAM_SERVER_NAME + "] is mandatory!"), null); + } + ClusterInfo cluster = clusterService.getCluster(clusterName); if(cluster == null) { return new GlusterServerResponse(new Status(Status.STATUS_CODE_FAILURE, "Cluster [" + clusterName @@ -287,6 +297,15 @@ public class GlusterServersResource extends AbstractServersResource { @Path("{" + PATH_PARAM_SERVER_NAME + "}") public Status removeServer(@PathParam(PATH_PARAM_CLUSTER_NAME) String clusterName, @PathParam(PATH_PARAM_SERVER_NAME) String serverName) { + if (clusterName.isEmpty()) { + return new Status(Status.STATUS_CODE_FAILURE, "Cluster name should not be empty!"); + } + + if(serverName == null || serverName.isEmpty()) { + return new Status(Status.STATUS_CODE_FAILURE, "Form parameter [" + FORM_PARAM_SERVER_NAME + + "] is mandatory!"); + } + ClusterInfo cluster = clusterService.getCluster(clusterName); if(cluster == null) { return new Status(Status.STATUS_CODE_FAILURE, "Cluster [" + clusterName + "] doesn't exist!"); -- cgit From 74e7c7673d80f1984bd62fd0268e1a0ba50b9203 Mon Sep 17 00:00:00 2001 From: Selvasundaram Date: Fri, 10 Jun 2011 10:41:17 +0530 Subject: Tasks and MigrateDiskTask resources --- .../management/core/constants/RESTConstants.java | 3 + .../storage/management/core/model/Task.java | 66 +++++++++ .../storage/management/core/model/TaskInfo.java | 91 +++++++++++++ .../storage/management/core/model/TaskStatus.java | 60 +++++++++ .../management/core/response/TaskListResponse.java | 56 ++++++++ .../management/core/response/TaskResponse.java | 52 ++++++++ .../management/server/resources/TaskResource.java | 148 +++++++++++++++++++++ .../management/server/tasks/MigrateDiskTask.java | 73 ++++++++++ 8 files changed, 549 insertions(+) create mode 100644 src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Task.java create mode 100644 src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/TaskInfo.java create mode 100644 src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/TaskStatus.java create mode 100644 src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/response/TaskListResponse.java create mode 100755 src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/response/TaskResponse.java create mode 100644 src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/TaskResource.java create mode 100644 src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/tasks/MigrateDiskTask.java (limited to 'src') 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 428eb53f..4e8e8f33 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 @@ -38,6 +38,7 @@ public class RESTConstants { public static final String RESOURCE_RUNNING_TASKS = "runningtasks"; public static final String RESOURCE_ALERTS = "alerts"; public static final String RESOURCE_SERVERS = "servers"; + public static final String RESOURCE_TASKS = "tasks"; public static final String FORM_PARAM_CLUSTER_NAME = "clusterName"; public static final String FORM_PARAM_SERVER_NAME = "serverName"; @@ -56,6 +57,7 @@ public class RESTConstants { public static final String PATH_PARAM_VOLUME_NAME = "volumeName"; public static final String PATH_PARAM_CLUSTER_NAME = "clusterName"; public static final String PATH_PARAM_SERVER_NAME = "serverName"; + public static final String PATH_PARAM_TASK_ID = "taskId"; public static final String QUERY_PARAM_BRICK_NAME = "brickName"; public static final String QUERY_PARAM_DISKS = "disks"; @@ -68,4 +70,5 @@ public class RESTConstants { public static final String QUERY_PARAM_TO_TIMESTAMP = "toTimestamp"; public static final String QUERY_PARAM_DOWNLOAD = "download"; public static final String QUERY_PARAM_SERVER_NAME = "serverName"; + public static final String QUERY_PARAM_TASK_OPERATION = "taskOperation"; } diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Task.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Task.java new file mode 100644 index 00000000..9268d060 --- /dev/null +++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Task.java @@ -0,0 +1,66 @@ +/** + * Task.java + * + * Copyright (c) 2011 Gluster, Inc. + * This file is part of Gluster Management Console. + * + * Gluster Management Console is free software; you can redistribute it and/or + * modify it under the terms of the GNU Affero General Public License as published + * by the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * Gluster Management Console is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License + * for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * . + */ +package com.gluster.storage.management.core.model; + +public abstract class Task { + public enum TASK_TYPE { + DISK_FORMAT, BRICK_MIGRATE, VOLUME_REBALANCE + } + + public String[] TASK_TYPE_STR = { "Format Disk", "Migrate Brick", "Volume Rebalance" }; + + private TaskInfo info; + + public Task(TASK_TYPE type, String reference, String description) { + info = new TaskInfo(); + info.setId(getTaskType(type) + "-" + reference); // construct id + info.setType(type); + info.setReference(reference); + info.setDescription(description); + } + public Task(TaskInfo info) { + setInfo(info); + } + + public String getTaskType(TASK_TYPE type) { + return TASK_TYPE_STR[type.ordinal()]; + } + + public abstract String getId(); + + public abstract TaskInfo resume(); + + public abstract TaskInfo stop(); + + public abstract TaskInfo pause(); + + public abstract TASK_TYPE getType(); + + public abstract TaskInfo getTaskInfo(); + + public TaskInfo getInfo() { + return info; + } + + public void setInfo(TaskInfo info) { + this.info = info; // TODO: review assigning reference and copy object + } +} diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/TaskInfo.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/TaskInfo.java new file mode 100644 index 00000000..d4549146 --- /dev/null +++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/TaskInfo.java @@ -0,0 +1,91 @@ +/** + * TaskInfo.java + * + * Copyright (c) 2011 Gluster, Inc. + * This file is part of Gluster Management Console. + * + * Gluster Management Console is free software; you can redistribute it and/or + * modify it under the terms of the GNU Affero General Public License as published + * by the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * Gluster Management Console is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License + * for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * . + */ +package com.gluster.storage.management.core.model; + +import com.gluster.storage.management.core.model.Task.TASK_TYPE; + +public class TaskInfo extends Status { + private String id; + private TASK_TYPE type; + private String reference; + private String description; + private Boolean canPause; + private Boolean canStop; + private TaskStatus status; + + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public TASK_TYPE getType() { + return type; + } + + public void setType(TASK_TYPE type) { + this.type = type; + } + + public String getReference() { + return reference; + } + + public void setReference(String reference) { + this.reference = reference; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public TaskStatus getStatus() { + return status; + } + + public void setStatus(TaskStatus status) { + this.status = status; + } + + public Boolean getCanPause() { + return canPause; + } + + public void setCanPause(Boolean canPause) { + this.canPause = canPause; + } + + public Boolean getCanStop() { + return canStop; + } + + public void setCanStop(Boolean canStop) { + this.canStop = canStop; + } + +} diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/TaskStatus.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/TaskStatus.java new file mode 100644 index 00000000..46dc7b31 --- /dev/null +++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/TaskStatus.java @@ -0,0 +1,60 @@ +/** + * TaskStatus.java + * + * Copyright (c) 2011 Gluster, Inc. + * This file is part of Gluster Management Console. + * + * Gluster Management Console is free software; you can redistribute it and/or + * modify it under the terms of the GNU Affero General Public License as published + * by the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * Gluster Management Console is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License + * for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * . + */ +package com.gluster.storage.management.core.model; + +public class TaskStatus extends Status { + + private boolean isPercentageSupported; + private float percentCompleted; + private String description; + + public TaskStatus() { + + } + + public TaskStatus(Status status) { + super(status.getCode(), status.getMessage()); + } + + public boolean isPercentageSupported() { + return isPercentageSupported; + } + + public void setPercentageSupported(boolean isPercentageSupported) { + this.isPercentageSupported = isPercentageSupported; + } + + public float getPercentCompleted() { + return percentCompleted; + } + + public void setPercentCompleted(float percentCompleted) { + this.percentCompleted = percentCompleted; + } + + 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/response/TaskListResponse.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/response/TaskListResponse.java new file mode 100644 index 00000000..1bc9b5b5 --- /dev/null +++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/response/TaskListResponse.java @@ -0,0 +1,56 @@ +/** + * TaskListResponse.java + * + * Copyright (c) 2011 Gluster, Inc. + * This file is part of Gluster Management Console. + * + * Gluster Management Console is free software; you can redistribute it and/or + * modify it under the terms of the GNU Affero General Public License as published + * by the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * Gluster Management Console is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License + * for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * . + */ +package com.gluster.storage.management.core.response; + +import java.util.ArrayList; +import java.util.List; + +import com.gluster.storage.management.core.model.Status; +import com.gluster.storage.management.core.model.TaskInfo; + +/** + * @author root + * + */ +public class TaskListResponse extends AbstractResponse { + private List taskList = new ArrayList(); + private Status status; + + public Status getStatus() { + return status; + } + + public void setStatus(Status status) { + this.status = status; + } + + + public void setData(List taskList) { + this.taskList.clear(); + this.taskList.addAll(taskList); + } + + @Override + public Object getData() { + // TODO Auto-generated method stub + return null; + } +} diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/response/TaskResponse.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/response/TaskResponse.java new file mode 100755 index 00000000..a11c9903 --- /dev/null +++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/response/TaskResponse.java @@ -0,0 +1,52 @@ +/** + * TaskInfoResponse.java + * + * Copyright (c) 2011 Gluster, Inc. + * This file is part of Gluster Management Console. + * + * Gluster Management Console is free software; you can redistribute it and/or + * modify it under the terms of the GNU Affero General Public License as published + * by the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * Gluster Management Console is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License + * for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * . + */ +package com.gluster.storage.management.core.response; + +import javax.xml.bind.annotation.XmlRootElement; + +import com.gluster.storage.management.core.model.Status; +import com.gluster.storage.management.core.model.TaskInfo; + +@XmlRootElement(name = "response") +public class TaskResponse extends AbstractResponse { + private TaskInfo taskInfo; + private Status status; + + public TaskResponse() { + } + + public Status getStatus() { + return status; + } + + public void setStatus(Status status) { + this.status = status; + } + + public void setData(TaskInfo taskInfo) { + this.taskInfo = taskInfo; + } + + @Override + public TaskInfo getData() { + return taskInfo; + } +} diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/TaskResource.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/TaskResource.java new file mode 100644 index 00000000..c5540dff --- /dev/null +++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/TaskResource.java @@ -0,0 +1,148 @@ +/** + * TaskResource.java + * + * Copyright (c) 2011 Gluster, Inc. + * This file is part of Gluster Management Console. + * + * Gluster Management Console is free software; you can redistribute it and/or + * modify it under the terms of the GNU Affero General Public License as published + * by the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * Gluster Management Console is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License + * for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * . + */ +package com.gluster.storage.management.server.resources; + +import static com.gluster.storage.management.core.constants.RESTConstants.PATH_PARAM_CLUSTER_NAME; +import static com.gluster.storage.management.core.constants.RESTConstants.PATH_PARAM_TASK_ID; +import static com.gluster.storage.management.core.constants.RESTConstants.QUERY_PARAM_TASK_OPERATION; +import static com.gluster.storage.management.core.constants.RESTConstants.RESOURCE_PATH_CLUSTERS; +import static com.gluster.storage.management.core.constants.RESTConstants.RESOURCE_TASKS; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import javax.ws.rs.DELETE; +import javax.ws.rs.GET; +import javax.ws.rs.PUT; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; +import javax.ws.rs.core.MediaType; + +import com.gluster.storage.management.core.exceptions.GlusterRuntimeException; +import com.gluster.storage.management.core.model.Status; +import com.gluster.storage.management.core.model.Task; +import com.gluster.storage.management.core.model.Task.TASK_TYPE; +import com.gluster.storage.management.core.model.TaskInfo; +import com.gluster.storage.management.core.response.TaskListResponse; +import com.gluster.storage.management.core.response.TaskResponse; +import com.gluster.storage.management.server.runningtasks.managers.MigrateDiskManager; +import com.gluster.storage.management.server.tasks.MigrateDiskTask; +import com.sun.jersey.spi.resource.Singleton; + +@Path(RESOURCE_PATH_CLUSTERS + "/{" + PATH_PARAM_CLUSTER_NAME + "}/" + RESOURCE_TASKS) +@Singleton +public class TaskResource { + private Map tasks; + + private TaskResource() { + } + + public void addTask(Task task) { + tasks.put(task.getId(), task); + } + + public void removeTask(Task task) { + tasks.remove(task); + } + + public List getAllTasks() { + List allTasks = new ArrayList(); + for (Map.Entry entry : tasks.entrySet()) { + allTasks.add(entry.getValue()); + } + return allTasks; + } + + public Task getTask(String taskId) { + for (Map.Entry entry : tasks.entrySet()) { + if (entry.getValue().getId().equals(taskId)) { + return entry.getValue(); + } + } + return null; + } + + @GET + @Produces(MediaType.TEXT_XML) + public TaskListResponse getTasks() { + TaskListResponse taskListResponse = new TaskListResponse(); + List taskInfoList = new ArrayList(); + try { + for (Task task : getAllTasks()) { + taskInfoList.add(task.getTaskInfo()); + } + taskListResponse.setData(taskInfoList); + taskListResponse.setStatus(new Status(Status.STATUS_CODE_SUCCESS, "")); + } catch (GlusterRuntimeException e) { + taskListResponse.setStatus(new Status(e)); + } + return taskListResponse; + } + + @PUT + @Path("/{" + PATH_PARAM_TASK_ID + "}") + @Produces(MediaType.TEXT_XML) + public TaskResponse performTask(@PathParam(PATH_PARAM_TASK_ID) String taskId, + @QueryParam(QUERY_PARAM_TASK_OPERATION) String taskOperation) { + Task task = getTask(taskId); + TaskInfo taskInfo = null; + TaskResponse taskResponse = new TaskResponse(); + + try { + if (taskOperation.equals("resume")) { + taskInfo = task.resume(); + } + if (taskOperation.equals("pause")) { + taskInfo = task.pause(); + } + if (taskOperation.equals("stop")) { + taskInfo = task.stop(); + } + taskResponse.setData(taskInfo); + taskResponse.setStatus(new Status(Status.STATUS_CODE_SUCCESS, "")); + } catch (GlusterRuntimeException e) { + taskResponse.setStatus(new Status(e)); + } + return taskResponse; + } + + @DELETE + @Path("/{" + PATH_PARAM_TASK_ID + "}") + @Produces(MediaType.TEXT_XML) + public TaskResponse deleteTask(@PathParam(PATH_PARAM_TASK_ID) String taskId, + @QueryParam(QUERY_PARAM_TASK_OPERATION) String taskOperation) { + TaskResponse taskResponse = new TaskResponse(); + Task task = getTask(taskId); + if (task == null) { + taskResponse.setStatus( new Status(Status.STATUS_CODE_FAILURE, "No such task " + taskId + "is found ")); + } + if (taskOperation.equals("delete")) { + removeTask(task); + taskResponse.setStatus(new Status(Status.STATUS_CODE_SUCCESS, "Task [" + taskId + + "] removed successfully")); + } + return null; + } + +} diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/tasks/MigrateDiskTask.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/tasks/MigrateDiskTask.java new file mode 100644 index 00000000..97f3d2aa --- /dev/null +++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/tasks/MigrateDiskTask.java @@ -0,0 +1,73 @@ +/** + * MigrateDiskTask.java + * + * Copyright (c) 2011 Gluster, Inc. + * This file is part of Gluster Management Console. + * + * Gluster Management Console is free software; you can redistribute it and/or + * modify it under the terms of the GNU Affero General Public License as published + * by the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * Gluster Management Console is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License + * for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * . + */ +package com.gluster.storage.management.server.tasks; + +import com.gluster.storage.management.core.model.Task; +import com.gluster.storage.management.core.model.TaskInfo; + +public class MigrateDiskTask extends Task { + + public MigrateDiskTask(TASK_TYPE type, String reference, String description ) { + super(type, reference, description ); + } + + public MigrateDiskTask(TaskInfo info) { + super(info); + } + + + @Override + public String getId() { + return getInfo().getId(); + } + + @Override + public TaskInfo resume() { + // To make a decision is the task has the ability to start the task + return null; + } + + + @Override + public TaskInfo stop() { + // To make a decision is the task has the ability to stop the task + return null; + } + + + @Override + public TaskInfo pause() { + // To make a decision is the task has the ability to pause the task + return null; + } + + + @Override + public TASK_TYPE getType() { + + return null; + } + + @Override + public TaskInfo getTaskInfo() { + return getInfo(); + } +} -- cgit From c69d803bacdc198c0a7e4beba8c549c73ec41e02 Mon Sep 17 00:00:00 2001 From: Dhandapani Date: Tue, 14 Jun 2011 14:49:47 +0530 Subject: Server Disk view issue fix --- .../management/client/GlusterDataModelManager.java | 2 +- .../gluster/storage/management/core/model/Disk.java | 6 +++--- .../management/core/model/GlusterDummyModel.java | 18 +++++++++--------- .../management/gui/BrickTableLabelProvider.java | 2 +- .../management/gui/DiskTableLabelProvider.java | 2 +- .../gui/ServerDiskTableLabelProvider.java | 21 +++++++++++---------- .../management/gui/actions/RemoveServerAction.java | 4 ++-- .../management/gui/jobs/InitializeDiskJob.java | 2 +- .../management/gui/views/pages/ServerDisksPage.java | 10 +++++----- .../src/get_server_details.py | 3 ++- 10 files changed, 36 insertions(+), 34 deletions(-) (limited to 'src') 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 82b05a91..ae2ead0c 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 @@ -432,7 +432,7 @@ public class GlusterDataModelManager { } public String getDiskStatus(Disk disk) { - if (disk.getStatus() == DISK_STATUS.READY) { + if (disk.getStatus() == DISK_STATUS.AVAILABLE) { for (Volume volume : model.getCluster().getVolumes()) { if (isDiskUsed(volume, disk)) { return "In use"; diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Disk.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Disk.java index 5b5422da..a399a03a 100644 --- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Disk.java +++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Disk.java @@ -27,10 +27,10 @@ import com.gluster.storage.management.core.utils.StringUtil; @XmlRootElement(name="Disk") public class Disk extends Entity { public enum DISK_STATUS { - READY, UNINITIALIZED, INITIALIZING, IO_ERROR + AVAILABLE, UNINITIALIZED, INITIALIZING, IO_ERROR }; - private String[] DISK_STATUS_STR = { "Ready", "Uninitialized", "Initializing", "I/O Error" }; + private String[] DISK_STATUS_STR = { "Available", "Uninitialized", "Initializing", "I/O Error" }; private String serverName; private String mountPoint; @@ -64,7 +64,7 @@ public class Disk extends Entity { } public boolean isReady() { - return getStatus() == DISK_STATUS.READY; + return getStatus() == DISK_STATUS.AVAILABLE; } public DISK_STATUS getStatus() { diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/GlusterDummyModel.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/GlusterDummyModel.java index 8921287a..8324b22d 100644 --- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/GlusterDummyModel.java +++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/GlusterDummyModel.java @@ -72,7 +72,7 @@ public class GlusterDummyModel { private void addDiscoveredServer(List servers, Entity parent, String name, int numOfCPUs, double cpuUsage, double totalMemory, double memoryInUse, double totalDiskSpace, double diskSpaceInUse) { Server server = new Server(name, parent, numOfCPUs, cpuUsage, totalMemory, memoryInUse); - server.addDisk(new Disk(server, "sda", "/export/md0", totalDiskSpace, diskSpaceInUse, DISK_STATUS.READY)); + server.addDisk(new Disk(server, "sda", "/export/md0", totalDiskSpace, diskSpaceInUse, DISK_STATUS.AVAILABLE)); addNetworkInterface(server, "eth0"); servers.add(server); @@ -139,18 +139,18 @@ public class GlusterDummyModel { } private void initializeDisks() { - s1da = new Disk(server1, "sda", "/export/md0", 100d, 80d, DISK_STATUS.READY); - s1db = new Disk(server1, "sdb", "/export/md1", 100d, 67.83, DISK_STATUS.READY); + s1da = new Disk(server1, "sda", "/export/md0", 100d, 80d, DISK_STATUS.AVAILABLE); + s1db = new Disk(server1, "sdb", "/export/md1", 100d, 67.83, DISK_STATUS.AVAILABLE); - s2da = new Disk(server2, "sda", "/export/md0", 200d, 157.12, DISK_STATUS.READY); - s2db = new Disk(server2, "sdb", "/export/md1", 200d, 182.27, DISK_STATUS.READY); + s2da = new Disk(server2, "sda", "/export/md0", 200d, 157.12, DISK_STATUS.AVAILABLE); + s2db = new Disk(server2, "sdb", "/export/md1", 200d, 182.27, DISK_STATUS.AVAILABLE); s2dc = new Disk(server2, "sdc", "/export/md0", 200d, -1d, DISK_STATUS.UNINITIALIZED); - s2dd = new Disk(server2, "sdd", "/export/md1", 200d, 124.89, DISK_STATUS.READY); + s2dd = new Disk(server2, "sdd", "/export/md1", 200d, 124.89, DISK_STATUS.AVAILABLE); - s4da = new Disk(server4, "sda", "/export/md0", 100d, 85.39, DISK_STATUS.READY); + s4da = new Disk(server4, "sda", "/export/md0", 100d, 85.39, DISK_STATUS.AVAILABLE); - s5da = new Disk(server5, "sda", "/export/md1", 100d, 92.83, DISK_STATUS.READY); - s5db = new Disk(server5, "sdb", "/export/md1", 200d, 185.69, DISK_STATUS.READY); + s5da = new Disk(server5, "sda", "/export/md1", 100d, 92.83, DISK_STATUS.AVAILABLE); + s5db = new Disk(server5, "sdb", "/export/md1", 200d, 185.69, DISK_STATUS.AVAILABLE); } private void addDisksToServers() { diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/BrickTableLabelProvider.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/BrickTableLabelProvider.java index 2d64782b..17e7c7ba 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/BrickTableLabelProvider.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/BrickTableLabelProvider.java @@ -46,7 +46,7 @@ public class BrickTableLabelProvider extends TableLabelProviderAdapter { if (columnIndex == DISK_TABLE_COLUMN_INDICES.STATUS.ordinal()) { DISK_STATUS status = disk.getStatus(); switch (status) { - case READY: + case AVAILABLE: return guiHelper.getImage(IImageKeys.STATUS_ONLINE); case IO_ERROR: return guiHelper.getImage(IImageKeys.STATUS_OFFLINE); diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/DiskTableLabelProvider.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/DiskTableLabelProvider.java index c355ac50..539b70d7 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/DiskTableLabelProvider.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/DiskTableLabelProvider.java @@ -46,7 +46,7 @@ public class DiskTableLabelProvider extends TableLabelProviderAdapter { if (columnIndex == DISK_TABLE_COLUMN_INDICES.STATUS.ordinal()) { DISK_STATUS status = disk.getStatus(); switch (status) { - case READY: + case AVAILABLE: return guiHelper.getImage(IImageKeys.STATUS_ONLINE); case IO_ERROR: return guiHelper.getImage(IImageKeys.STATUS_OFFLINE); diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/ServerDiskTableLabelProvider.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/ServerDiskTableLabelProvider.java index 57a7b312..80625779 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/ServerDiskTableLabelProvider.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/ServerDiskTableLabelProvider.java @@ -43,7 +43,7 @@ public class ServerDiskTableLabelProvider extends TableLabelProviderAdapter { if (columnIndex == SERVER_DISK_TABLE_COLUMN_INDICES.STATUS.ordinal()) { DISK_STATUS status = disk.getStatus(); switch (status) { - case READY: + case AVAILABLE: return guiHelper.getImage(IImageKeys.STATUS_ONLINE); case IO_ERROR: return guiHelper.getImage(IImageKeys.STATUS_OFFLINE); @@ -59,17 +59,18 @@ public class ServerDiskTableLabelProvider extends TableLabelProviderAdapter { return null; } - private String getDiskSpaceInUse(Disk disk) { - if(disk.hasErrors() || disk.isUninitialized()) { - return CoreConstants.NA; + + private String getDiskFreeSpace(Disk disk) { + if (disk.hasErrors() || disk.isUninitialized()) { + return "NA"; } else { - return NumberUtil.formatNumber(disk.getSpaceInUse()); + return NumberUtil.formatNumber(disk.getFreeSpace()); } } - private String getDiskSpace(Disk disk) { - if(disk.hasErrors() || disk.isUninitialized()) { - return CoreConstants.NA; + private String getTotalDiskSpace(Disk disk) { + if (disk.hasErrors() || disk.isUninitialized()) { + return "NA"; } else { return NumberUtil.formatNumber(disk.getSpace()); } @@ -83,8 +84,8 @@ public class ServerDiskTableLabelProvider extends TableLabelProviderAdapter { Disk disk = (Disk) element; String columnText = (columnIndex == SERVER_DISK_TABLE_COLUMN_INDICES.DISK.ordinal() ? disk.getName() - : columnIndex == SERVER_DISK_TABLE_COLUMN_INDICES.SPACE.ordinal() ? getDiskSpace(disk) - : columnIndex == SERVER_DISK_TABLE_COLUMN_INDICES.SPACE_IN_USE.ordinal() ? getDiskSpaceInUse(disk) + : columnIndex == SERVER_DISK_TABLE_COLUMN_INDICES.FREE_SPACE.ordinal() ? getDiskFreeSpace(disk) + : columnIndex == SERVER_DISK_TABLE_COLUMN_INDICES.TOTAL_SPACE.ordinal() ? getTotalDiskSpace(disk) : columnIndex == SERVER_DISK_TABLE_COLUMN_INDICES.STATUS.ordinal() ? glusterDataModelManager.getDiskStatus(disk) // disk.getStatusStr() : "Invalid"); return ((columnText == null || columnText.trim().equals("")) ? CoreConstants.NA : columnText); diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/RemoveServerAction.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/RemoveServerAction.java index 83489c37..514fd0a5 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/RemoveServerAction.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/RemoveServerAction.java @@ -129,7 +129,7 @@ public class RemoveServerAction extends AbstractActionDelegate { if (usedServers.size() == 1) { showErrorDialog(action.getDescription(), "Server [" + usedServers.keySet().iterator().next() + "] cannot be removed as it is being used by volume(s): " + CoreConstants.NEWLINE - + usedServers.values().iterator().next() + "]"); + + usedServers.values().iterator().next() ); } else { String serverList = ""; for (Entry> entry : usedServers.entrySet()) { @@ -137,7 +137,7 @@ public class RemoveServerAction extends AbstractActionDelegate { } showErrorDialog(action.getDescription(), "Following servers cannot be removed as they are being used by volume(s): " - + CoreConstants.NEWLINE + serverList + "]"); + + CoreConstants.NEWLINE + serverList ); } return false; } diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/jobs/InitializeDiskJob.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/jobs/InitializeDiskJob.java index b5945e61..02a8b0e0 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/jobs/InitializeDiskJob.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/jobs/InitializeDiskJob.java @@ -76,7 +76,7 @@ public class InitializeDiskJob extends Job { e.printStackTrace(); } - updateStatus(DISK_STATUS.READY); + updateStatus(DISK_STATUS.AVAILABLE); setProperty(IProgressConstants.ICON_PROPERTY, guiHelper.getImageDescriptor(IImageKeys.STATUS_SUCCESS)); return new Status(Status.OK, Application.PLUGIN_ID, "Task Completed!"); diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/ServerDisksPage.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/ServerDisksPage.java index c2f76a43..b993f73e 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/ServerDisksPage.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/ServerDisksPage.java @@ -35,11 +35,11 @@ public class ServerDisksPage extends AbstractDisksPage { } public enum SERVER_DISK_TABLE_COLUMN_INDICES { - DISK, SPACE, SPACE_IN_USE, STATUS + DISK, FREE_SPACE, TOTAL_SPACE, STATUS }; - private static final String[] SERVER_DISK_TABLE_COLUMN_NAMES = new String[] { "Disk", "Space (GB)", - "Space in Use (GB)", "Status" }; + private static final String[] SERVER_DISK_TABLE_COLUMN_NAMES = new String[] { "Disk", "Free Space (GB)", + "Total Space (GB)", "Status" }; @Override protected String[] getColumnNames() { @@ -49,8 +49,8 @@ public class ServerDisksPage extends AbstractDisksPage { @Override protected void setColumnProperties(Table table) { guiHelper.setColumnProperties(table, SERVER_DISK_TABLE_COLUMN_INDICES.DISK.ordinal(), SWT.CENTER, 100); - guiHelper.setColumnProperties(table, SERVER_DISK_TABLE_COLUMN_INDICES.SPACE.ordinal(), SWT.CENTER, 90); - guiHelper.setColumnProperties(table, SERVER_DISK_TABLE_COLUMN_INDICES.SPACE_IN_USE.ordinal(), SWT.CENTER, 90); + guiHelper.setColumnProperties(table, SERVER_DISK_TABLE_COLUMN_INDICES.FREE_SPACE.ordinal(), SWT.CENTER, 90); + guiHelper.setColumnProperties(table, SERVER_DISK_TABLE_COLUMN_INDICES.TOTAL_SPACE.ordinal(), SWT.CENTER, 90); guiHelper.setColumnProperties(table, SERVER_DISK_TABLE_COLUMN_INDICES.STATUS.ordinal(), SWT.LEFT, 90); } diff --git a/src/com.gluster.storage.management.server.scripts/src/get_server_details.py b/src/com.gluster.storage.management.server.scripts/src/get_server_details.py index aac1e5e1..fcae5171 100755 --- a/src/com.gluster.storage.management.server.scripts/src/get_server_details.py +++ b/src/com.gluster.storage.management.server.scripts/src/get_server_details.py @@ -22,6 +22,7 @@ import socket import Globals import Commands import re +import Common from ServerUtils import * from Protocol import * from NetworkUtils import * @@ -218,7 +219,7 @@ def getServerDetails(listall): if used: partitionTag.appendChild(responseDom.createTag("spaceInUse", str(used))) diskSpaceInUse += used - partitionTag.appendChild(responseDom.createTag("status", "READY")) + partitionTag.appendChild(responseDom.createTag("status", "AVAILABLE")) else: partitionTag.appendChild(responseDom.createTag("spaceInUse", "NA")) partitionTag.appendChild(responseDom.createTag("status", "UNINITIALIZED")) -- cgit