diff options
| author | Shireesh Anjal <shireesh@gluster.com> | 2011-07-28 23:04:44 +0530 |
|---|---|---|
| committer | Shireesh Anjal <shireesh@gluster.com> | 2011-07-28 23:05:40 +0530 |
| commit | 9c88133b3e220ec5e31488f0dd132562fb2b81a1 (patch) | |
| tree | 49a198695849582ef41a0c16df7d8201c332695a /src | |
| parent | 7aacb647a5c06c845835dd7b4927939806bb6dc6 (diff) | |
Story #29 - Memory Usage Graph
Diffstat (limited to 'src')
9 files changed, 57 insertions, 65 deletions
diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/ApplicationWorkbenchAdvisor.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/ApplicationWorkbenchAdvisor.java index 1d381055..bc262e7e 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/ApplicationWorkbenchAdvisor.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/ApplicationWorkbenchAdvisor.java @@ -23,6 +23,8 @@ import org.eclipse.core.runtime.jobs.IJobChangeEvent; import org.eclipse.core.runtime.jobs.Job; import org.eclipse.core.runtime.jobs.JobChangeAdapter; import org.eclipse.jface.preference.IPreferenceStore; +import org.eclipse.jface.util.IPropertyChangeListener; +import org.eclipse.jface.util.PropertyChangeEvent; import org.eclipse.ui.application.IWorkbenchConfigurer; import org.eclipse.ui.application.IWorkbenchWindowConfigurer; import org.eclipse.ui.application.WorkbenchAdvisor; @@ -37,6 +39,9 @@ import com.gluster.storage.management.gui.preferences.PreferenceConstants; */ public class ApplicationWorkbenchAdvisor extends WorkbenchAdvisor { private Job syncJob; + private static final IPreferenceStore preferenceStore = Activator.getDefault().getPreferenceStore(); + private long JOB_INTERVAL = preferenceStore.getLong(PreferenceConstants.P_DATA_SYNC_INTERVAL) * 1000; + private IPropertyChangeListener propertyChangeListener; public WorkbenchWindowAdvisor createWorkbenchWindowAdvisor(IWorkbenchWindowConfigurer configurer) { return new ApplicationWorkbenchWindowAdvisor(configurer); @@ -50,8 +55,23 @@ public class ApplicationWorkbenchAdvisor extends WorkbenchAdvisor { public void initialize(IWorkbenchConfigurer configurer) { super.initialize(configurer); configurer.setSaveAndRestore(false); // we don't need save/restore as of now + + createPropertyChangeListener(); + preferenceStore.addPropertyChangeListener(propertyChangeListener); } + private void createPropertyChangeListener() { + propertyChangeListener = new IPropertyChangeListener() { + + @Override + public void propertyChange(PropertyChangeEvent event) { + if(event.getProperty().equals(PreferenceConstants.P_DATA_SYNC_INTERVAL)) { + JOB_INTERVAL = (Long)event.getNewValue() * 1000; + } + } + }; + } + @Override public void postStartup() { super.postStartup(); @@ -59,9 +79,6 @@ public class ApplicationWorkbenchAdvisor extends WorkbenchAdvisor { } private void setupBackgroundJobs() { - final IPreferenceStore preferenceStore = Activator.getDefault().getPreferenceStore(); - final long JOB_INTERVAL = preferenceStore.getLong(PreferenceConstants.P_DATA_SYNC_INTERVAL) * 1000; - syncJob = new DataSyncJob("Cluster Data Sync"); syncJob.schedule(JOB_INTERVAL); syncJob.addJobChangeListener(new JobChangeAdapter() { diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/preferences/PreferenceConstants.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/preferences/PreferenceConstants.java index a53b1879..bf2e7c25 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/preferences/PreferenceConstants.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/preferences/PreferenceConstants.java @@ -34,6 +34,7 @@ public class PreferenceConstants { public static final String P_CPU_CHART_PERIOD = "cpu.chart.period"; public static final String P_MEM_CHART_PERIOD = "memory.chart.period"; public static final String P_NETWORK_CHART_PERIOD = "network.chart.period"; + public static final String P_DEFAULT_NETWORK_INTERFACE_PFX = "default.network.interface."; public static final String P_CPU_AGGREGATED_CHART_PERIOD = "cpu.aggregated.chart.period"; public static final String P_NETWORK_AGGREGATED_CHART_PERIOD = "network.aggregated.chart.period"; } 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 db31ee51..b9e388c5 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 @@ -203,14 +203,12 @@ public class ChartUtil { public void linkActivated(HyperlinkEvent e) { super.linkActivated(e); Composite section = ((Hyperlink) e.getSource()).getParent().getParent(); - ServerStats stats = fetchStats(serverName); - refreshChartSection(toolkit, section, stats, statsPeriod, unit, maxValue, columnCount, this, - dataColumnIndex); + updatePreference(serverName); } public abstract ChartPeriodLinkListener getInstance(String statsPeriod); - protected abstract ServerStats fetchStats(String serverName); + protected abstract void updatePreference(String serverName); } public class CpuChartPeriodLinkListener extends ChartPeriodLinkListener { @@ -224,17 +222,13 @@ public class ChartUtil { } @Override - protected ServerStats fetchStats(String serverName) { + protected void updatePreference(String serverName) { ServerStats stats; if (serverName == null) { preferenceStore.setValue(PreferenceConstants.P_CPU_AGGREGATED_CHART_PERIOD, statsPeriod); - stats = new GlusterServersClient().getAggregatedCpuStats(statsPeriod); - GlusterDataModelManager.getInstance().getModel().getCluster().setAggregatedCpuStats(stats); } else { preferenceStore.setValue(PreferenceConstants.P_CPU_CHART_PERIOD, statsPeriod); - stats = new GlusterServersClient().getCpuStats(serverName, statsPeriod); } - return stats; } @Override @@ -254,11 +248,8 @@ public class ChartUtil { } @Override - protected ServerStats fetchStats(String serverName) { - IPreferenceStore preferenceStore = Activator.getDefault().getPreferenceStore(); + protected void updatePreference(String serverName) { preferenceStore.setValue(PreferenceConstants.P_MEM_CHART_PERIOD, statsPeriod); - ServerStats stats = new GlusterServersClient().getMemoryStats(serverName, statsPeriod); - return stats; } @Override @@ -283,18 +274,12 @@ public class ChartUtil { } @Override - protected ServerStats fetchStats(String serverName) { - ServerStats stats; + protected void updatePreference(String serverName) { if (serverName == null) { preferenceStore.setValue(PreferenceConstants.P_NETWORK_AGGREGATED_CHART_PERIOD, statsPeriod); - stats = new GlusterServersClient().getAggregatedNetworkStats(statsPeriod); - GlusterDataModelManager.getInstance().getModel().getCluster().setAggregatedNetworkStats(stats); } else { preferenceStore.setValue(PreferenceConstants.P_NETWORK_CHART_PERIOD, statsPeriod); - stats = new GlusterServersClient().getNetworkStats(serverName, "eth0", statsPeriod); } - - return stats; } @Override @@ -318,8 +303,6 @@ public class ChartUtil { public void createNetworkInterfaceCombo(final Composite section, final Composite graphComposite, final FormToolkit toolkit, final NetworkChartPeriodLinkListener networkChartPeriodLinkListener) { final GlusterServer server = networkChartPeriodLinkListener.getServer(); - final String networkStatsPeriod = preferenceStore.getString(PreferenceConstants.P_NETWORK_CHART_PERIOD); - final CCombo interfaceCombo = new CCombo(graphComposite, SWT.DROP_DOWN | SWT.READ_ONLY | SWT.BORDER | SWT.FLAT); final List<NetworkInterface> niList = server.getNetworkInterfaces(); final String[] interfaces = new String[niList.size()]; @@ -332,12 +315,7 @@ public class ChartUtil { interfaceCombo.addModifyListener(new ModifyListener() { @Override public void modifyText(ModifyEvent e) { - int selectionIndex = interfaceCombo.getSelectionIndex(); - String networkInterface = interfaces[selectionIndex]; - ServerStats stats = new GlusterServersClient().getNetworkStats(server.getName(), networkInterface, - networkStatsPeriod); - ChartUtil.getInstance().refreshChartSection(toolkit, section, stats, networkStatsPeriod, "KiB/s", -1, - 5, networkChartPeriodLinkListener, 2); + preferenceStore.setValue(PreferenceConstants.P_DEFAULT_NETWORK_INTERFACE_PFX + server.getName(), interfaces[interfaceCombo.getSelectionIndex()]); } }); } 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 4b476e9f..2c83fed2 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 @@ -132,7 +132,8 @@ public class GlusterServerSummaryView extends ViewPart { refreshCpuChart(); } else if(propertyName.equals(PreferenceConstants.P_MEM_CHART_PERIOD)) { refreshMemoryChart(); - } else if(propertyName.equals(PreferenceConstants.P_NETWORK_CHART_PERIOD)) { + } else if (propertyName.equals(PreferenceConstants.P_NETWORK_CHART_PERIOD) + || propertyName.equals(PreferenceConstants.P_DEFAULT_NETWORK_INTERFACE_PFX + server.getName())) { refreshNetworkChart(); } } @@ -164,7 +165,11 @@ public class GlusterServerSummaryView extends ViewPart { 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); + String networkInterface = preferenceStore.getString(PreferenceConstants.P_DEFAULT_NETWORK_INTERFACE_PFX + server.getName()); + if(networkInterface == null || networkInterface.isEmpty()) { + networkInterface = server.getNetworkInterfaces().get(0).getName(); + } + ServerStats stats = new GlusterServersClient().getNetworkStats(server.getName(), networkInterface, statsPeriod); chartUtil.refreshChartSection(toolkit, networkUsageSection, stats, statsPeriod, "KiB/s", -1, 5, chartUtil.new NetworkChartPeriodLinkListener(server, statsPeriod, toolkit), 2); } @@ -273,7 +278,7 @@ public class GlusterServerSummaryView extends ViewPart { } // in case of CPU usage, there are three elements in usage data: user, system and total. we use total. - chartUtil.createAreaChart(toolkit, cpuUsageSection, stats, 0, "%", chartUtil + chartUtil.createAreaChart(toolkit, cpuUsageSection, stats, 2, "%", chartUtil .getTimestampFormatForPeriod(cpuStatsPeriod), chartUtil.new CpuChartPeriodLinkListener(server.getName(), cpuStatsPeriod, toolkit), 100, 4); } @@ -295,7 +300,7 @@ public class GlusterServerSummaryView extends ViewPart { // 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); - chartUtil.createAreaChart(toolkit, networkUsageSection, stats, 2, "%", chartUtil + chartUtil.createAreaChart(toolkit, networkUsageSection, stats, 2, "KiB/s", chartUtil .getTimestampFormatForPeriod(networkStatsPeriod), networkChartPeriodLinkListener , -1, 5); } diff --git a/src/com.gluster.storage.management.server/WebContent/WEB-INF/web.xml b/src/com.gluster.storage.management.server/WebContent/WEB-INF/web.xml index 405c4e40..e810c2ed 100644 --- a/src/com.gluster.storage.management.server/WebContent/WEB-INF/web.xml +++ b/src/com.gluster.storage.management.server/WebContent/WEB-INF/web.xml @@ -64,14 +64,6 @@ <!-- Spring Security --> <filter> - <filter-name>authFailureFilter</filter-name> - <filter-class>com.gluster.storage.management.server.filters.AuthenticationFailureFilter</filter-class> - </filter> - <filter-mapping> - <filter-name>authFailureFilter</filter-name> - <url-pattern>/*</url-pattern> - </filter-mapping> - <filter> <filter-name>springSecurityFilterChain</filter-name> <filter-class> org.springframework.web.filter.DelegatingFilterProxy diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/v1_0/KeysResource.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/v1_0/KeysResource.java index f04fc5da..807291be 100644 --- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/v1_0/KeysResource.java +++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/v1_0/KeysResource.java @@ -64,13 +64,13 @@ public class KeysResource extends AbstractResource { private String createSskKeyZipFile() { String targetDir = System.getProperty("java.io.tmpdir"); String zipFile = targetDir + "ssh-keys.tar"; - String sourcePemFile = SshUtil.PEM_FILE.getAbsolutePath(); + String sourcePemFile = SshUtil.PRIVATE_KEY_FILE.getAbsolutePath(); String sourcePubKeyFile = SshUtil.PUBLIC_KEY_FILE.getAbsolutePath(); - String targetPemFile = targetDir + File.separator + SshUtil.PEM_FILE.getName(); + String targetPemFile = targetDir + File.separator + SshUtil.PRIVATE_KEY_FILE.getName(); String targetPubKeyFile = targetDir + File.separator + SshUtil.PUBLIC_KEY_FILE.getName(); - if (!SshUtil.PEM_FILE.isFile()) { - throw new GlusterRuntimeException("No private key file [" + SshUtil.PEM_FILE.getName() + "] found!" ); + if (!SshUtil.PRIVATE_KEY_FILE.isFile()) { + throw new GlusterRuntimeException("No private key file [" + SshUtil.PRIVATE_KEY_FILE.getName() + "] found!" ); } if (!SshUtil.PUBLIC_KEY_FILE.isFile()) { @@ -88,7 +88,7 @@ public class KeysResource extends AbstractResource { } // To compress the key files - result = processUtil.executeCommand("tar", "cvf", zipFile, "-C", "/tmp", SshUtil.PEM_FILE.getName(), + result = processUtil.executeCommand("tar", "cvf", zipFile, "-C", "/tmp", SshUtil.PRIVATE_KEY_FILE.getName(), SshUtil.PUBLIC_KEY_FILE.getName()); if (!result.isSuccess()) { throw new GlusterRuntimeException("Failed to compress key files! [" + result.getOutput() + "]"); @@ -112,8 +112,8 @@ public class KeysResource extends AbstractResource { writeToFile(uploadedInputStream, uploadedFile.getAbsolutePath()); // To backup existing SSH pem and public keys, if exist. - if (SshUtil.PEM_FILE.isFile()) { - if (!SshUtil.PEM_FILE.renameTo(new File(SshUtil.PEM_FILE.getAbsolutePath() + "-" + timestamp))) { + if (SshUtil.PRIVATE_KEY_FILE.isFile()) { + if (!SshUtil.PRIVATE_KEY_FILE.renameTo(new File(SshUtil.PRIVATE_KEY_FILE.getAbsolutePath() + "-" + timestamp))) { throw new GlusterRuntimeException("Unable to backup pem key!"); } } @@ -126,7 +126,7 @@ public class KeysResource extends AbstractResource { } // Extract SSH pem and public key files. ProcessResult output = processUtil.executeCommand("tar", "xvf", uploadedFile.getName(), "-C", - SshUtil.SSH_AUTHORIZED_KEYS_DIR); + SshUtil.SSH_AUTHORIZED_KEYS_DIR_LOCAL); uploadedFile.delete(); if (!output.isSuccess()) { throw new GlusterRuntimeException(output.getOutput()); diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/AbstractStatsFactory.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/AbstractStatsFactory.java index b6e95270..6f1226aa 100644 --- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/AbstractStatsFactory.java +++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/AbstractStatsFactory.java @@ -76,7 +76,7 @@ public abstract class AbstractStatsFactory implements StatsFactory { addServerStats(fetchStats(serverName, period), aggregatedStats, dataCount); } catch(Exception e) { // server might be offline - continue with next one - logger.warn("Couldn't fetch CPU stats from server [" + serverName + "]!", e); + logger.warn("Couldn't fetch performance stats from server [" + serverName + "]!", e); continue; } } @@ -137,7 +137,7 @@ public abstract class AbstractStatsFactory implements StatsFactory { @Override public ServerStats fetchAggregatedStats(List<String> serverNames, String period) { if(serverNames == null || serverNames.size() == 0) { - throw new GlusterRuntimeException("No server names passed to fetchAggregaredCPUStats!"); + throw new GlusterRuntimeException("No server names passed to fetchAggregaredStats!"); } ServerStats firstServerStats = getFirstOnlineServerStats(serverNames, period, true, true); diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/SshUtil.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/SshUtil.java index 746b8832..b874b98e 100644 --- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/SshUtil.java +++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/SshUtil.java @@ -23,7 +23,6 @@ import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; -import java.io.UnsupportedEncodingException; import java.util.Arrays; import org.apache.log4j.Logger; @@ -49,13 +48,15 @@ import com.gluster.storage.management.core.utils.ProcessResult; @Component public class SshUtil { private static final String TEMP_DIR = "/tmp/"; - public static final String SSH_AUTHORIZED_KEYS_DIR = "/root/.ssh/"; + public static final String SSH_AUTHORIZED_KEYS_DIR_LOCAL = "/opt/glustermg/keys/"; + public static final String SSH_AUTHORIZED_KEYS_DIR_REMOTE = "/root/.ssh/"; private static final String SSH_AUTHORIZED_KEYS_FILE = "authorized_keys"; - private static final String SSH_AUTHORIZED_KEYS_PATH = SSH_AUTHORIZED_KEYS_DIR + SSH_AUTHORIZED_KEYS_FILE; - private LRUCache<String, Connection> sshConnCache = new LRUCache<String, Connection>(10); - public static final File PEM_FILE = new File(CoreConstants.USER_HOME + File.separator + ".ssh/id_rsa"); - public static final File PUBLIC_KEY_FILE = new File(CoreConstants.USER_HOME + File.separator + ".ssh/id_rsa.pub"); + private static final String SSH_AUTHORIZED_KEYS_PATH_REMOTE = SSH_AUTHORIZED_KEYS_DIR_REMOTE + SSH_AUTHORIZED_KEYS_FILE; + public static final File PRIVATE_KEY_FILE = new File(SSH_AUTHORIZED_KEYS_DIR_LOCAL + "id_rsa"); + public static final File PUBLIC_KEY_FILE = new File(SSH_AUTHORIZED_KEYS_DIR_LOCAL + "id_rsa.pub"); private static final String SCRIPT_DISABLE_SSH_PASSWORD_AUTH = "disable-ssh-password-auth.sh"; + private static final String PRIVATE_KEY_PASSPHRASE = "gluster"; + private LRUCache<String, Connection> sshConnCache = new LRUCache<String, Connection>(10); // TODO: Make user name configurable private static final String USER_NAME = "root"; @@ -111,7 +112,7 @@ public class SshUtil { } try { // get authorized_keys from server - scpClient.get(SSH_AUTHORIZED_KEYS_PATH, TEMP_DIR); + scpClient.get(SSH_AUTHORIZED_KEYS_PATH_REMOTE, TEMP_DIR); } catch (IOException e) { // file doesn't exist. it will get created. } @@ -134,7 +135,7 @@ public class SshUtil { } try { - scpClient.put(localTempFile.getAbsolutePath(), SSH_AUTHORIZED_KEYS_FILE, SSH_AUTHORIZED_KEYS_DIR, "0600"); + scpClient.put(localTempFile.getAbsolutePath(), SSH_AUTHORIZED_KEYS_FILE, SSH_AUTHORIZED_KEYS_DIR_REMOTE, "0600"); } catch (IOException e) { throw new GlusterRuntimeException("Couldn't add public key to server [" + serverName + "]", e); } @@ -175,8 +176,7 @@ public class SshUtil { + "]"); } - // TODO: Introduce password for the PEM file (third argument) so that it is more secure - if (!conn.authenticateWithPublicKey(USER_NAME, PEM_FILE, null)) { + if (!conn.authenticateWithPublicKey(USER_NAME, PRIVATE_KEY_FILE, PRIVATE_KEY_PASSPHRASE)) { throw new ConnectionException("SSH Authentication (public key) failed for server [" + conn.getHostname() + "]"); } @@ -194,7 +194,6 @@ public class SshUtil { + "]"); } - // TODO: Introduce password for the PEM file (third argument) so that it is more secure if (!conn.authenticateWithPassword(USER_NAME, DEFAULT_PASSWORD)) { throw new ConnectionException("SSH Authentication (password) failed for server [" + conn.getHostname() + "]"); diff --git a/src/com.gluster.storage.management.server/src/spring/gluster-server-base.xml b/src/com.gluster.storage.management.server/src/spring/gluster-server-base.xml index b9fb2126..76cd3082 100644 --- a/src/com.gluster.storage.management.server/src/spring/gluster-server-base.xml +++ b/src/com.gluster.storage.management.server/src/spring/gluster-server-base.xml @@ -49,7 +49,7 @@ <!-- Derby embedded data source --> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" lazy-init="false"> <property name="driverClassName" value="org.apache.derby.jdbc.EmbeddedDriver" /> - <property name="url" value="jdbc:derby:/etc/glustermg/data;create=true" /> + <property name="url" value="jdbc:derby:/opt/glustermg/data;create=true" /> <property name="username" value="gluster" /> <property name="password" value="gluster" /> </bean> |
