diff options
| author | Selvasundaram <selvam@gluster.com> | 2011-07-25 14:54:50 +0530 |
|---|---|---|
| committer | Selvasundaram <selvam@gluster.com> | 2011-07-25 14:54:50 +0530 |
| commit | 0662fff71691bfcb0e667d7ffb4f9e057c2860be (patch) | |
| tree | a21ffe346d8f76bf7919299bfc72241fd80c7eda /src/com.gluster.storage.management.gui | |
| parent | f887ca2e1b69874117ce930771f837a6776bd94d (diff) | |
| parent | a2a52d53ee2e0dd32b993c112200cfd1c927aafa (diff) | |
Merge branch 'master' of github.com:gluster/console
Diffstat (limited to 'src/com.gluster.storage.management.gui')
5 files changed, 135 insertions, 63 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 8c5c540c..14086260 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 @@ -26,6 +26,7 @@ import java.util.Set; import org.apache.log4j.Logger; import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.jface.preference.IPreferenceStore; import com.gluster.storage.management.client.DiscoveredServersClient; import com.gluster.storage.management.client.GlusterServersClient; @@ -33,6 +34,7 @@ import com.gluster.storage.management.client.TasksClient; import com.gluster.storage.management.client.VolumesClient; import com.gluster.storage.management.core.exceptions.GlusterRuntimeException; import com.gluster.storage.management.core.model.Alert; +import com.gluster.storage.management.core.model.Alert.ALERT_TYPES; import com.gluster.storage.management.core.model.Brick; import com.gluster.storage.management.core.model.Cluster; import com.gluster.storage.management.core.model.ClusterListener; @@ -57,6 +59,7 @@ import com.gluster.storage.management.core.model.Volume.VOLUME_STATUS; import com.gluster.storage.management.core.model.Volume.VOLUME_TYPE; import com.gluster.storage.management.core.model.VolumeOptionInfo; import com.gluster.storage.management.core.utils.GlusterCoreUtil; +import com.gluster.storage.management.gui.preferences.PreferenceConstants; public class GlusterDataModelManager { private static GlusterDataModelManager instance = new GlusterDataModelManager(); @@ -117,6 +120,16 @@ public class GlusterDataModelManager { volumeChanged(oldVolume, newVolume); } } + + private boolean isCancelled(IProgressMonitor monitor) { + if(monitor.isCanceled()) { + monitor.setTaskName("Data sync cancelled!"); + monitor.done(); + return true; + } else { + return false; + } + } public GlusterDataModel fetchModel(IProgressMonitor monitor) { synchronized (syncInProgress) { @@ -133,23 +146,46 @@ public class GlusterDataModelManager { Cluster cluster = new Cluster(clusterName, model); model.addCluster(cluster); - monitor.beginTask("Data Sync", 4); + monitor.beginTask("Data Sync", 6); monitor.setTaskName("Syncing servers..."); initializeGlusterServers(cluster); monitor.worked(1); + if(isCancelled(monitor)) { + return model; + } monitor.setTaskName("Syncing volumes..."); initializeVolumes(cluster); monitor.worked(1); + if(isCancelled(monitor)) { + return model; + } monitor.setTaskName("Syncing discovered servers..."); initializeAutoDiscoveredServers(cluster); monitor.worked(1); + if(isCancelled(monitor)) { + return model; + } monitor.setTaskName("Syncing tasks..."); initializeTasks(cluster); monitor.worked(1); + if(isCancelled(monitor)) { + return model; + } + + monitor.setTaskName("Syncing aggregated CPU stats..."); + initializeAggregatedCpuStats(cluster); + monitor.worked(1); + if(isCancelled(monitor)) { + return model; + } + + monitor.setTaskName("Syncing aggregated Network stats..."); + initializeAggregatedNetworkStats(cluster); + monitor.worked(1); monitor.done(); return model; @@ -390,12 +426,26 @@ public class GlusterDataModelManager { this.volumeOptionsDefaults = new VolumesClient(clusterName).getVolumeOptionsDefaults(); } - public void initializeTasks(Cluster cluster) { + private void initializeTasks(Cluster cluster) { List<TaskInfo> taskInfoList = new TasksClient(cluster.getName()).getAllTasks(); //List<TaskInfo> taskInfoList = getDummyTasks(); cluster.setTaskInfoList(taskInfoList); } + private void initializeAggregatedCpuStats(Cluster cluster) { + IPreferenceStore preferenceStore = Activator.getDefault().getPreferenceStore(); + String cpuStatsPeriod = preferenceStore.getString(PreferenceConstants.P_CPU_CHART_PERIOD); + + cluster.setAggregatedCpuStats(new GlusterServersClient().getAggregatedCpuStats(cpuStatsPeriod)); + } + + private void initializeAggregatedNetworkStats(Cluster cluster) { + IPreferenceStore preferenceStore = Activator.getDefault().getPreferenceStore(); + String networkStatsPeriod = preferenceStore.getString(PreferenceConstants.P_NETWORK_CHART_PERIOD); + + cluster.setAggregatedNetworkStats(new GlusterServersClient().getAggregatedNetworkStats(networkStatsPeriod)); + } + private List<TaskInfo> getDummyTasks() { List<TaskInfo> taskInfoList = new ArrayList<TaskInfo>(); diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/preferences/ChartsPreferencePage.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/preferences/ChartsPreferencePage.java index e1a54081..3dd636f1 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/preferences/ChartsPreferencePage.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/preferences/ChartsPreferencePage.java @@ -25,7 +25,6 @@ import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPreferencePage; /** - * @author root * */ public class ChartsPreferencePage extends FieldEditorPreferencePage implements IWorkbenchPreferencePage { diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/utils/ChartViewerComposite.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/utils/ChartViewerComposite.java index f7ebd0ec..f2735380 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/utils/ChartViewerComposite.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/utils/ChartViewerComposite.java @@ -213,7 +213,7 @@ public final class ChartViewerComposite extends Composite implements PaintListen DateTimeDataElement dtde1 = DateTimeDataElementImpl.create(timestamps[0]); xAxisPrimary.getScale().setMax(dtde); xAxisPrimary.getScale().setStep((dtde.getValue() - dtde1.getValue())/ 10); - xAxisPrimary.getScale().setMajorGridsStepNumber(timestamps.length / 10); + xAxisPrimary.getScale().setMajorGridsStepNumber(timestamps.length > 10 ? timestamps.length / 10 : 1); //xAxisPrimary.getMajorGrid().setTickStyle(TickStyle.ABOVE_LITERAL); xAxisPrimary.getMajorGrid().getTickAttributes().setVisible(false); xAxisPrimary.getMajorGrid().setLineAttributes(LineAttributesImpl.create(ColorDefinitionImpl.GREY(), LineStyle.SOLID_LITERAL, 1)); 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 8f2288ec..51b8f4da 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 @@ -24,6 +24,7 @@ import java.util.ArrayList; import java.util.List; import org.eclipse.birt.chart.util.CDateTime; +import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.CLabel; import org.eclipse.swt.graphics.Image; @@ -53,9 +54,11 @@ import com.gluster.storage.management.core.model.ServerStats; import com.gluster.storage.management.core.model.ServerStatsRow; import com.gluster.storage.management.core.model.TaskInfo; import com.gluster.storage.management.core.utils.NumberUtil; +import com.gluster.storage.management.gui.Activator; import com.gluster.storage.management.gui.GlusterDataModelManager; import com.gluster.storage.management.gui.IImageKeys; import com.gluster.storage.management.gui.actions.IActionConstants; +import com.gluster.storage.management.gui.preferences.PreferenceConstants; import com.gluster.storage.management.gui.utils.ChartViewerComposite; import com.gluster.storage.management.gui.utils.GUIHelper; import com.ibm.icu.util.Calendar; @@ -239,7 +242,6 @@ public class ClusterSummaryView extends ViewPart { createDiskSpaceSection(); createCPUUsageSection(); createNetworkUsageSection(); - //createMemoryUsageSection(); createActionsSection(); createAlertsSection(); createRunningTasksSection(); @@ -247,31 +249,24 @@ public class ClusterSummaryView extends ViewPart { parent.layout(); // IMP: lays out the form properly } - private void createCPUUsageSection() { - ServerStats stats; - try { - stats = new GlusterServersClient().getAggregatedCPUStats(); - } catch(Exception e) { + private void createAreaChartSection(ServerStats stats, String sectionTitle, int dataColumnIndex, String unit) { + Composite section = guiHelper.createSection(form, toolkit, sectionTitle, null, 1, false); + + List<Calendar> timestamps = new ArrayList<Calendar>(); + List<Double> data = new ArrayList<Double>(); + extractChartData(stats, timestamps, data, dataColumnIndex); + + if(timestamps.size() == 0) { + toolkit.createLabel(section, "Server statistics not available!\n Please check if all services are running properly on the cluster servers."); return; } - - Composite section = guiHelper.createSection(form, toolkit, "CPU Usage (aggregated)", null, 1, false); + if (cluster.getServers().size() == 0) { toolkit.createLabel(section, "This section will be populated after at least\none server is added to the storage cloud."); return; } - List<Calendar> timestamps = new ArrayList<Calendar>(); - List<Double> data = new ArrayList<Double>(); - for(ServerStatsRow row : stats.getRows()) { - // in case of CPU usage, there are three elements in usage data: user, system and total. we use total. - Double cpuUsage = row.getUsageData().get(2); - if(!cpuUsage.isNaN()) { - timestamps.add(new CDateTime(row.getTimestamp() * 1000)); - data.add(cpuUsage); - } - } - createLineChart(section, timestamps.toArray(new Calendar[0]), data.toArray(new Double[0]), "%"); + createLineChart(section, timestamps.toArray(new Calendar[0]), data.toArray(new Double[0]), unit); // Calendar[] timestamps = new Calendar[] { new CDateTime(1000l*1310468100), new CDateTime(1000l*1310468400), new CDateTime(1000l*1310468700), // new CDateTime(1000l*1310469000), new CDateTime(1000l*1310469300), new CDateTime(1000l*1310469600), new CDateTime(1000l*1310469900), @@ -285,25 +280,24 @@ public class ClusterSummaryView extends ViewPart { createChartLinks(section, 4); } + private void createCPUUsageSection() { + // in case of CPU usage, there are three elements in usage data: user, system and total. we use total. + createAreaChartSection(cluster.getAggregatedCpuStats(), "CPU Usage (Aggregated)", 2, "%"); + } + + private void extractChartData(ServerStats stats, List<Calendar> timestamps, List<Double> data, int dataColumnIndex) { + for(ServerStatsRow row : stats.getRows()) { + Double cpuUsage = row.getUsageData().get(dataColumnIndex); + if(!cpuUsage.isNaN()) { + timestamps.add(new CDateTime(row.getTimestamp() * 1000)); + data.add(cpuUsage); + } + } + } + private void createNetworkUsageSection() { - Composite section = guiHelper.createSection(form, toolkit, "Network Usage (Aggregated)", null, 1, false); - //toolkit.createLabel(section, "Historical Network Usage graph will be displayed here."); - - Calendar[] timestamps = new Calendar[] { new CDateTime(1000l*1310468100), new CDateTime(1000l*1310468400), new CDateTime(1000l*1310468700), - new CDateTime(1000l*1310469000), new CDateTime(1000l*1310469300), new CDateTime(1000l*1310469600), new CDateTime(1000l*1310469900), - new CDateTime(1000l*1310470200), new CDateTime(1000l*1310470500), new CDateTime(1000l*1310470800), new CDateTime(1000l*1310471100), - new CDateTime(1000l*1310471400), new CDateTime(1000l*1310471700), new CDateTime(1000l*1310472000), new CDateTime(1000l*1310472300), - new CDateTime(1000l*1310472600), new CDateTime(1000l*1310472900), new CDateTime(1000l*1310473200), new CDateTime(1000l*1310473500), - new CDateTime(1000l*1310473800) }; -// Date[] timestamps = new Date[] { new Date(1310468100), new Date(1310468400), new Date(1310468700), -// new Date(1310469000), new Date(1310469300), new Date(1310469600), new Date(1310469900), -// new Date(1310470200), new Date(1310470500), new Date(1310470800), new Date(1310471100), -// new Date(1310471400), new Date(1310471700), new Date(1310472000), new Date(1310472300), -// new Date(1310472600), new Date(1310472900), new Date(1310473200), new Date(1310473500), -// new Date(1310473800) }; - Double[] values = new Double[] { 32d, 31.23d, 27.92d, 48.69d, 58.62d, 49.11d, 72.43d, 69.31d, 87.39d, 78.46d, 60.44d, 56.28d, 33.51d, 27.53d, 12.21, 10d, 21.43d, 36.45d, 34.86d, 35.27d }; - createLineChart(section, timestamps, values, "KiB/s"); - createChartLinks(section, 4); + // in case of network usage, there are three elements in usage data: received, transmitted and total. we use total. + createAreaChartSection(cluster.getAggregatedNetworkStats(), "Network Usage (Aggregated)", 2, "KiB/s"); } private void createRunningTasksSection() { 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 498c9fe0..dfbafa70 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 @@ -23,8 +23,10 @@ package com.gluster.storage.management.gui.views; import java.util.ArrayList; import java.util.List; +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.viewers.ArrayContentProvider; import org.eclipse.jface.viewers.ColumnWeightData; import org.eclipse.jface.viewers.TableViewer; @@ -46,15 +48,20 @@ import org.eclipse.ui.forms.widgets.Hyperlink; import org.eclipse.ui.forms.widgets.ScrolledForm; import org.eclipse.ui.part.ViewPart; +import com.gluster.storage.management.client.GlusterServersClient; import com.gluster.storage.management.core.model.ClusterListener; 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.Server.SERVER_STATUS; +import com.gluster.storage.management.core.model.ServerStats; +import com.gluster.storage.management.core.model.ServerStatsRow; import com.gluster.storage.management.core.utils.NumberUtil; +import com.gluster.storage.management.gui.Activator; import com.gluster.storage.management.gui.GlusterDataModelManager; import com.gluster.storage.management.gui.IImageKeys; import com.gluster.storage.management.gui.NetworkInterfaceTableLabelProvider; +import com.gluster.storage.management.gui.preferences.PreferenceConstants; import com.gluster.storage.management.gui.toolbar.GlusterToolbarManager; import com.gluster.storage.management.gui.utils.ChartViewerComposite; import com.gluster.storage.management.gui.utils.GUIHelper; @@ -69,6 +76,7 @@ public class GlusterServerSummaryView extends ViewPart { private GlusterServer server; private ClusterListener serverChangedListener; private static final int CHART_WIDTH = 350; + private static final Logger logger = Logger.getLogger(GlusterServerSummaryView.class); public enum NETWORK_INTERFACE_TABLE_COLUMN_INDICES { INTERFACE, MODEL, SPEED, IP_ADDRESS, NETMASK, GATEWAY @@ -154,34 +162,55 @@ public class GlusterServerSummaryView extends ViewPart { interfaceCombo.select(0); } - - private void createCPUUsageSection() { - Composite section = guiHelper.createSection(form, toolkit, "CPU Usage", null, 1, false); - //toolkit.createLabel(section, "Historical CPU Usage graph aggregated across\nall servers will be displayed here."); + private void extractChartData(ServerStats stats, List<Calendar> timestamps, List<Double> data, int dataColumnIndex) { + for(ServerStatsRow row : stats.getRows()) { + Double cpuUsage = row.getUsageData().get(dataColumnIndex); + if(!cpuUsage.isNaN()) { + timestamps.add(new CDateTime(row.getTimestamp() * 1000)); + data.add(cpuUsage); + } + } + } - Calendar[] timestamps = new Calendar[] { new CDateTime(1000l*1310468100), new CDateTime(1000l*1310468400), new CDateTime(1000l*1310468700), - new CDateTime(1000l*1310469000), new CDateTime(1000l*1310469300), new CDateTime(1000l*1310469600), new CDateTime(1000l*1310469900), - new CDateTime(1000l*1310470200), new CDateTime(1000l*1310470500), new CDateTime(1000l*1310470800), new CDateTime(1000l*1310471100), - new CDateTime(1000l*1310471400), new CDateTime(1000l*1310471700), new CDateTime(1000l*1310472000), new CDateTime(1000l*1310472300), - new CDateTime(1000l*1310472600), new CDateTime(1000l*1310472900), new CDateTime(1000l*1310473200), new CDateTime(1000l*1310473500), - new CDateTime(1000l*1310473800) }; - //Double[] values = new Double[] { 10d, 11.23d, 17.92d, 18.69d, 78.62d, 89.11d, 92.43d, 20.31d, 19.63d, 18.46d, 10.44d, 16.28d, 13.51d, 17.53d, 12.21, 20d, 40d, 10d, 90d, 40d }; - Double[] values = new Double[] { 10d, 11.23d, 17.92d, 18.69d, 78.62d, 89.11d, 92.43d, 89.31d, 57.39d, 18.46d, 10.44d, 16.28d, 13.51d, 17.53d, 12.21, 20d, 21.43d, 16.45d, 14.86d, 15.27d }; - createLineChart(section, timestamps, values, "%"); + private void createAreaChartSection(ServerStats stats, String sectionTitle, int dataColumnIndex, String unit) { + List<Calendar> timestamps = new ArrayList<Calendar>(); + List<Double> data = new ArrayList<Double>(); + extractChartData(stats, timestamps, data, dataColumnIndex); -// ServerStats stats = new GlusterServersClient().getAggregatedCPUStats(); -// List<Calendar> timestamps = new ArrayList<Calendar>(); -// List<Double> data = new ArrayList<Double>(); -// for(ServerStatsRow row : stats.getRows()) { -// timestamps.add(new CDateTime(row.getTimestamp() * 1000)); -// // in case of CPU usage, there are three elements in usage data: user, system and total. we use total. -// data.add(row.getUsageData().get(2)); -// } + if(timestamps.size() == 0) { + // Log a message saying no CPU stats available + return; + } + + Composite section = guiHelper.createSection(form, toolkit, sectionTitle, null, 1, false); + createLineChart(section, timestamps.toArray(new Calendar[0]), data.toArray(new Double[0]), unit); + +// Calendar[] timestamps = new Calendar[] { new CDateTime(1000l*1310468100), new CDateTime(1000l*1310468400), new CDateTime(1000l*1310468700), +// new CDateTime(1000l*1310469000), new CDateTime(1000l*1310469300), new CDateTime(1000l*1310469600), new CDateTime(1000l*1310469900), +// new CDateTime(1000l*1310470200), new CDateTime(1000l*1310470500), new CDateTime(1000l*1310470800), new CDateTime(1000l*1310471100), +// new CDateTime(1000l*1310471400), new CDateTime(1000l*1310471700), new CDateTime(1000l*1310472000), new CDateTime(1000l*1310472300), +// new CDateTime(1000l*1310472600), new CDateTime(1000l*1310472900), new CDateTime(1000l*1310473200), new CDateTime(1000l*1310473500), +// new CDateTime(1000l*1310473800) }; // -// createLineChart(section, timestamps.toArray(new Calendar[0]), data.toArray(new Double[0])); +// Double[] values = new Double[] { 10d, 11.23d, 17.92d, 18.69d, 78.62d, 89.11d, 92.43d, 89.31d, 57.39d, 18.46d, 10.44d, 16.28d, 13.51d, 17.53d, 12.21, 20d, 21.43d, 16.45d, 14.86d, 15.27d }; +// createLineChart(section, timestamps, values, "%"); createChartLinks(section, 4); } + private void createCPUUsageSection() { + IPreferenceStore preferenceStore = Activator.getDefault().getPreferenceStore(); + String cpuStatsPeriod = preferenceStore.getString(PreferenceConstants.P_CPU_CHART_PERIOD); + + try { + ServerStats stats = new GlusterServersClient().getCpuStats(server.getName(), cpuStatsPeriod); + // in case of CPU usage, there are three elements in usage data: user, system and total. we use total. + createAreaChartSection(stats, "CPU Usage", 2, "%"); + } catch(Exception e) { + logger.error("Couldn't fetch CPU usage statistics for server [" + server.getName() + "]", e); + return; + } + } + private Composite createChartLinks(Composite section, int columnCount) { GridLayout layout = new org.eclipse.swt.layout.GridLayout(columnCount, false); layout.marginBottom = 0; |
