summaryrefslogtreecommitdiffstats
path: root/src/com.gluster.storage.management.gui
diff options
context:
space:
mode:
authorSelvasundaram <selvam@gluster.com>2011-07-25 14:54:50 +0530
committerSelvasundaram <selvam@gluster.com>2011-07-25 14:54:50 +0530
commit0662fff71691bfcb0e667d7ffb4f9e057c2860be (patch)
treea21ffe346d8f76bf7919299bfc72241fd80c7eda /src/com.gluster.storage.management.gui
parentf887ca2e1b69874117ce930771f837a6776bd94d (diff)
parenta2a52d53ee2e0dd32b993c112200cfd1c927aafa (diff)
Merge branch 'master' of github.com:gluster/console
Diffstat (limited to 'src/com.gluster.storage.management.gui')
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/GlusterDataModelManager.java54
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/preferences/ChartsPreferencePage.java1
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/utils/ChartViewerComposite.java2
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/ClusterSummaryView.java68
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/GlusterServerSummaryView.java73
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;