diff options
Diffstat (limited to 'src/com.gluster.storage.management.gui')
5 files changed, 126 insertions, 25 deletions
diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/GlusterDataModelManager.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/GlusterDataModelManager.java index 08bef79c..e19645a5 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/GlusterDataModelManager.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/GlusterDataModelManager.java @@ -440,7 +440,7 @@ public class GlusterDataModelManager { cluster.setAggregatedCpuStats(new GlusterServersClient().getAggregatedCpuStats(cpuStatsPeriod)); } - private void initializeAggregatedNetworkStats(Cluster cluster) { + public void initializeAggregatedNetworkStats(Cluster cluster) { IPreferenceStore preferenceStore = Activator.getDefault().getPreferenceStore(); String networkStatsPeriod = preferenceStore.getString(PreferenceConstants.P_NETWORK_AGGREGATED_CHART_PERIOD); 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 ae2d574b..058eabb1 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 @@ -82,6 +82,7 @@ public class DeleteVolumeAction extends AbstractActionDelegate { "Volume [" + volume.getName() + "] could not be deleted! Error: [" + e.getMessage() + "]"); } else { showWarningDialog(actionDesc, "Volume deleted, but following error(s) occured: " + e.getMessage()); + modelManager.deleteVolume(volume); } } } diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/utils/ChartUtil.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/utils/ChartUtil.java index d7ee7664..db31ee51 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/utils/ChartUtil.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/utils/ChartUtil.java @@ -27,12 +27,9 @@ import org.eclipse.swt.SWT; import org.eclipse.swt.custom.CCombo; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; -import org.eclipse.swt.events.SelectionAdapter; -import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Control; import org.eclipse.ui.forms.events.HyperlinkAdapter; import org.eclipse.ui.forms.events.HyperlinkEvent; import org.eclipse.ui.forms.widgets.FormToolkit; diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/ClusterSummaryView.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/ClusterSummaryView.java index 89f862ed..27b0e32b 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/ClusterSummaryView.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/ClusterSummaryView.java @@ -23,6 +23,8 @@ package com.gluster.storage.management.gui.views; import java.util.List; import org.eclipse.jface.preference.IPreferenceStore; +import org.eclipse.jface.util.IPropertyChangeListener; +import org.eclipse.jface.util.PropertyChangeEvent; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.CLabel; import org.eclipse.swt.graphics.Image; @@ -79,6 +81,7 @@ public class ClusterSummaryView extends ViewPart { private Composite alertsSection; private Composite tasksSection; private static final ChartUtil chartUtil = ChartUtil.getInstance(); + private IPropertyChangeListener propertyChangeListener; /* * (non-Javadoc) @@ -93,6 +96,39 @@ public class ClusterSummaryView extends ViewPart { setPartName("Summary"); createSections(parent); + createListeners(); + } + + private void createListeners() { + createClusterListener(); + GlusterDataModelManager.getInstance().addClusterListener(clusterListener); + + createPropertyChangeListener(); + preferenceStore.addPropertyChangeListener(propertyChangeListener ); + } + + private void createPropertyChangeListener() { + propertyChangeListener = new IPropertyChangeListener() { + @Override + public void propertyChange(PropertyChangeEvent event) { + String preferenceName = event.getProperty(); + GlusterDataModelManager modelManager = GlusterDataModelManager.getInstance(); + if(preferenceName.equals(PreferenceConstants.P_CPU_AGGREGATED_CHART_PERIOD)) { + modelManager.initializeAggregatedCpuStats(cluster); + String cpuStatsPeriod = (String)event.getNewValue(); + refreshChartSection(cpuChartSection, cluster.getAggregatedCpuStats(), cpuStatsPeriod, "%", 100, 4, + chartUtil.new CpuChartPeriodLinkListener(null, cpuStatsPeriod, toolkit), 2); + } else if(preferenceName.equals(PreferenceConstants.P_NETWORK_AGGREGATED_CHART_PERIOD)) { + modelManager.initializeAggregatedNetworkStats(cluster); + String networkStatsPeriod = (String)event.getNewValue(); + refreshChartSection(networkChartSection, cluster.getAggregatedNetworkStats(), networkStatsPeriod, "KiB/s", -1, + 4, chartUtil.new NetworkChartPeriodLinkListener(null, networkStatsPeriod, toolkit), 2); + } + } + }; + } + + private void createClusterListener() { clusterListener = new DefaultClusterListener() { @Override public void aggregatedStatsChanged() { @@ -130,13 +166,13 @@ public class ClusterSummaryView extends ViewPart { populateTasksSection(); } }; - GlusterDataModelManager.getInstance().addClusterListener(clusterListener); } @Override public void dispose() { super.dispose(); GlusterDataModelManager.getInstance().removeClusterListener(clusterListener); + preferenceStore.removePropertyChangeListener(propertyChangeListener); } private void refreshCharts() { diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/GlusterServerSummaryView.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/GlusterServerSummaryView.java index 43495f31..19ecc440 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/GlusterServerSummaryView.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/GlusterServerSummaryView.java @@ -27,6 +27,8 @@ import org.apache.log4j.Logger; import org.eclipse.birt.chart.util.CDateTime; import org.eclipse.jface.layout.TableColumnLayout; import org.eclipse.jface.preference.IPreferenceStore; +import org.eclipse.jface.util.IPropertyChangeListener; +import org.eclipse.jface.util.PropertyChangeEvent; import org.eclipse.jface.viewers.ArrayContentProvider; import org.eclipse.jface.viewers.ColumnWeightData; import org.eclipse.jface.viewers.TableViewer; @@ -56,6 +58,7 @@ import com.gluster.storage.management.core.model.DefaultClusterListener; import com.gluster.storage.management.core.model.Event; import com.gluster.storage.management.core.model.GlusterServer; import com.gluster.storage.management.core.model.NetworkInterface; +import com.gluster.storage.management.core.model.Event.EVENT_TYPE; import com.gluster.storage.management.core.model.Server.SERVER_STATUS; import com.gluster.storage.management.core.model.ServerStats; import com.gluster.storage.management.core.model.ServerStatsRow; @@ -79,7 +82,7 @@ public class GlusterServerSummaryView extends ViewPart { private final FormToolkit toolkit = new FormToolkit(Display.getCurrent()); private ScrolledForm form; private GlusterServer server; - private ClusterListener serverChangedListener; + private ClusterListener clusterListener; private static final int CHART_WIDTH = 350; private static final int CHART_HEIGHT = 250; private static final Logger logger = Logger.getLogger(GlusterServerSummaryView.class); @@ -92,6 +95,11 @@ public class GlusterServerSummaryView extends ViewPart { private static final String[] NETWORK_INTERFACE_TABLE_COLUMN_NAMES = { "Interface", "Model", "Speed", "IP Address", "Netmask", "Gateway" }; private CoolGauge cpuGauge; + private IPropertyChangeListener propertyChangeListener; + private Composite cpuUsageSection; + private Composite networkUsageSection; + private Composite memoryUsageSection; + private static final ChartUtil chartUtil = ChartUtil.getInstance(); @Override public void createPartControl(Composite parent) { @@ -101,25 +109,88 @@ public class GlusterServerSummaryView extends ViewPart { setPartName("Summary"); createSections(parent); + createListeners(); + } + + private void createListeners() { + // Refresh the server details whenever the server has changed + createClusterListener(); + GlusterDataModelManager.getInstance().addClusterListener(clusterListener); + + createPropertyChangeListener(); + preferenceStore.addPropertyChangeListener(propertyChangeListener); + } + + private void createPropertyChangeListener() { + propertyChangeListener = new IPropertyChangeListener() { + + @Override + public void propertyChange(PropertyChangeEvent event) { + String propertyName = event.getProperty(); + if(propertyName.equals(PreferenceConstants.P_CPU_CHART_PERIOD)) { + refreshCpuChart(); + } else if(propertyName.equals(PreferenceConstants.P_MEM_CHART_PERIOD)) { + refreshMemoryChart(); + } else if(propertyName.equals(PreferenceConstants.P_NETWORK_CHART_PERIOD)) { + refreshNetworkChart(); + } + } + }; + } + + private void createClusterListener() { final GlusterToolbarManager toolbarManager = new GlusterToolbarManager(getSite().getWorkbenchWindow()); - // Refresh the navigation tree whenever there is a change to the data model - serverChangedListener = new DefaultClusterListener() { + final GlusterServer thisServer = server; + clusterListener = new DefaultClusterListener() { + @Override public void serverChanged(GlusterServer server, Event event) { - updateServerDetails(); - toolbarManager.updateToolbar(server); + if (event.getEventType() == EVENT_TYPE.GLUSTER_SERVER_CHANGED && server == thisServer) { + updateServerDetails(); + toolbarManager.updateToolbar(server); + refreshCharts(); + } } }; - GlusterDataModelManager.getInstance().addClusterListener(serverChangedListener); } + private void refreshCharts() { + refreshCpuChart(); + refreshMemoryChart(); + refreshNetworkChart(); + } + + private void refreshNetworkChart() { + guiHelper.clearSection(networkUsageSection); + String statsPeriod = preferenceStore.getString(PreferenceConstants.P_NETWORK_CHART_PERIOD); + ServerStats stats = new GlusterServersClient().getNetworkStats(server.getName(), server.getNetworkInterfaces().get(0).getName(), statsPeriod); + chartUtil.refreshChartSection(toolkit, networkUsageSection, stats, statsPeriod, "KiB/s", -1, 5, chartUtil.new NetworkChartPeriodLinkListener(server, statsPeriod, toolkit), 2); + } + + private void refreshMemoryChart() { + guiHelper.clearSection(memoryUsageSection); + String statsPeriod = preferenceStore.getString(PreferenceConstants.P_MEM_CHART_PERIOD); + ServerStats stats = new GlusterServersClient().getMemoryStats(server.getName(), statsPeriod); + chartUtil.refreshChartSection(toolkit, memoryUsageSection, stats, statsPeriod, "%", 100, 4, chartUtil.new MemoryChartPeriodLinkListener(server.getName(), statsPeriod, toolkit), 0); + } + + private void refreshCpuChart() { + guiHelper.clearSection(cpuUsageSection); + String statsPeriod = preferenceStore.getString(PreferenceConstants.P_CPU_CHART_PERIOD); + ServerStats stats = new GlusterServersClient().getCpuStats(server.getName(), statsPeriod); + chartUtil.refreshChartSection(toolkit, cpuUsageSection, stats, statsPeriod, "%", 100, 4, + chartUtil.new CpuChartPeriodLinkListener(server.getName(), statsPeriod, toolkit), 2); + } + private void updateServerDetails() { + // TODO: Update the server details (cpu usage, memory usage) } @Override public void dispose() { super.dispose(); - GlusterDataModelManager.getInstance().removeClusterListener(serverChangedListener); + GlusterDataModelManager.getInstance().removeClusterListener(clusterListener); + preferenceStore.removePropertyChangeListener(propertyChangeListener); } private void createAreaChart(Composite section, Calendar timestamps[], Double values[], String unit) { @@ -167,50 +238,46 @@ public class GlusterServerSummaryView extends ViewPart { private void createMemoryUsageSection() { String memStatsPeriod = preferenceStore.getString(PreferenceConstants.P_MEM_CHART_PERIOD); - Composite section = guiHelper.createSection(form, toolkit, "Memory Usage", null, 1, false); + memoryUsageSection = guiHelper.createSection(form, toolkit, "Memory Usage", null, 1, false); ServerStats stats; try { - guiHelper.setStatusMessage("Fetching server memory statistics..."); stats = new GlusterServersClient().getMemoryStats(server.getName(), memStatsPeriod); } catch(Exception e) { logger.error("Couldn't fetch memory usage statistics for server [" + server.getName() + "]", e); - toolkit.createLabel(section, "Couldn't fetch memory usage statistics for server [" + server.getName() + "]! Error: [" + e.getMessage() + "]"); + toolkit.createLabel(memoryUsageSection, "Couldn't fetch memory usage statistics for server [" + server.getName() + "]! Error: [" + e.getMessage() + "]"); return; } - guiHelper.setStatusMessage("Creating memory chart..."); // in case of memory usage, there are four elements in usage data: user, free, cache, buffer and total. we use "user". ChartUtil chartUtil = ChartUtil.getInstance(); - chartUtil.createAreaChart(toolkit, section, stats, 0, "%", chartUtil + chartUtil.createAreaChart(toolkit, memoryUsageSection, stats, 0, "%", chartUtil .getTimestampFormatForPeriod(memStatsPeriod), chartUtil.new MemoryChartPeriodLinkListener(server.getName(), memStatsPeriod, toolkit), 100, 4); - guiHelper.setStatusMessage(null); } private void createCPUUsageSection() { String cpuStatsPeriod = preferenceStore.getString(PreferenceConstants.P_CPU_CHART_PERIOD); - Composite section = guiHelper.createSection(form, toolkit, "CPU Usage", null, 1, false); + cpuUsageSection = guiHelper.createSection(form, toolkit, "CPU Usage", null, 1, false); ServerStats stats; try { stats = new GlusterServersClient().getCpuStats(server.getName(), cpuStatsPeriod); } catch(Exception e) { logger.error("Couldn't fetch CPU usage statistics for server [" + server.getName() + "]", e); - toolkit.createLabel(section, "Couldn't fetch CPU usage statistics for server [" + server.getName() + "]! Error: [" + e.getMessage() + "]"); + toolkit.createLabel(cpuUsageSection, "Couldn't fetch CPU usage statistics for server [" + server.getName() + "]! Error: [" + e.getMessage() + "]"); return; } // in case of CPU usage, there are three elements in usage data: user, system and total. we use total. - ChartUtil chartUtil = ChartUtil.getInstance(); - chartUtil.createAreaChart(toolkit, section, stats, 0, "%", chartUtil + chartUtil.createAreaChart(toolkit, cpuUsageSection, stats, 0, "%", chartUtil .getTimestampFormatForPeriod(cpuStatsPeriod), chartUtil.new CpuChartPeriodLinkListener(server.getName(), cpuStatsPeriod, toolkit), 100, 4); } private void createNetworkUsageSection() { final String networkStatsPeriod = preferenceStore.getString(PreferenceConstants.P_NETWORK_CHART_PERIOD); - final Composite section = guiHelper.createSection(form, toolkit, "Network Usage", null, 1, false); + networkUsageSection = guiHelper.createSection(form, toolkit, "Network Usage", null, 1, false); String networkInterface = server.getNetworkInterfaces().get(0).getName(); ServerStats stats; @@ -218,14 +285,14 @@ public class GlusterServerSummaryView extends ViewPart { stats = new GlusterServersClient().getNetworkStats(server.getName(), networkInterface, networkStatsPeriod); } catch(Exception e) { logger.error("Couldn't fetch Network usage statistics for server [" + server.getName() + "] network interface [" + networkInterface + "]", e); - toolkit.createLabel(section, "Couldn't fetch CPU usage statistics for server [" + server.getName() + "]! Error: [" + e.getMessage() + "]"); + toolkit.createLabel(networkUsageSection, "Couldn't fetch CPU usage statistics for server [" + server.getName() + "]! Error: [" + e.getMessage() + "]"); return; } // in case of network usage, there are three elements in usage data: received, transmitted and total. we use total. final ChartUtil chartUtil = ChartUtil.getInstance(); final ChartPeriodLinkListener networkChartPeriodLinkListener = chartUtil.new NetworkChartPeriodLinkListener(server, networkStatsPeriod, toolkit); - Composite graphComposite = chartUtil.createAreaChart(toolkit, section, stats, 2, "%", chartUtil + chartUtil.createAreaChart(toolkit, networkUsageSection, stats, 2, "%", chartUtil .getTimestampFormatForPeriod(networkStatsPeriod), networkChartPeriodLinkListener , -1, 5); } |
