summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDhandapani <dhandapani@gluster.com>2011-05-25 18:14:24 +0530
committerDhandapani <dhandapani@gluster.com>2011-05-25 18:14:24 +0530
commit4d229fb2c145a9ed6905760d1481cef965c5b44d (patch)
treead7f4432577837498ec109b5e0c7e31839fe7d98
parent4968a929c59d5ddac86acc057c40e6d82cbdd865 (diff)
parent6c38028fcae5bcd7dac5a170edab618f2d1b580c (diff)
Merge commit 'upstream/master'
Conflicts: src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterDataModelManager.java src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/GlusterDummyModel.java src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/AbstractServersResource.java
-rw-r--r--src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/DiscoveredServersClient.java31
-rw-r--r--src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterDataModelManager.java111
-rw-r--r--src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterServersClient.java10
-rw-r--r--src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/constants/CoreConstants.java1
-rw-r--r--src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Disk.java8
-rw-r--r--src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/GlusterDummyModel.java34
-rw-r--r--src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/GlusterServer.java5
-rw-r--r--src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/NetworkInterface.java56
-rw-r--r--src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Server.java17
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/DiskTableLabelProvider.java4
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/NetworkInterfaceTableLabelProvider.java7
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/ServerDiskTableLabelProvider.java19
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/GlusterServerSummaryView.java9
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/details/tabcreators/GlusterServerTabCreator.java42
-rw-r--r--src/com.gluster.storage.management.server.scripts/src/common/NetworkUtils.py23
-rw-r--r--src/com.gluster.storage.management.server.scripts/src/nodes/Disk.py20
-rwxr-xr-xsrc/com.gluster.storage.management.server.scripts/src/nodes/get_server_details.py16
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/AbstractServersResource.java57
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/DiscoveredServersResource.java47
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/GlusterServersResource.java94
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/GlusterUtil.java20
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/ServerUtil.java101
22 files changed, 422 insertions, 310 deletions
diff --git a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/DiscoveredServersClient.java b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/DiscoveredServersClient.java
index c7ea7507..a1dad796 100644
--- a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/DiscoveredServersClient.java
+++ b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/DiscoveredServersClient.java
@@ -18,11 +18,8 @@
*******************************************************************************/
package com.gluster.storage.management.client;
-import java.util.List;
-
import javax.ws.rs.core.MultivaluedMap;
-import com.gluster.storage.management.core.model.Response;
import com.gluster.storage.management.core.model.Server;
import com.gluster.storage.management.core.response.GenericResponse;
import com.gluster.storage.management.core.response.ServerListResponse;
@@ -32,7 +29,7 @@ import com.sun.jersey.core.util.MultivaluedMapImpl;
public class DiscoveredServersClient extends AbstractClient {
private static final String RESOURCE_NAME = "discoveredservers";
- public DiscoveredServersClient(String serverName, String securityToken) {
+ public DiscoveredServersClient(String securityToken) {
super(securityToken);
}
@@ -45,19 +42,16 @@ public class DiscoveredServersClient extends AbstractClient {
private Object getDiscoveredServers(Boolean getDetails, Class responseClass) {
MultivaluedMap<String, String> queryParams = new MultivaluedMapImpl();
queryParams.putSingle("details", getDetails.toString());
-
- //System.out.println((String) fetchResource(queryParams, String.class));
- return ((Response) fetchResource(queryParams, responseClass)).getData();
+ return fetchResource(queryParams, responseClass);
}
- @SuppressWarnings("unchecked")
- public List<String> getDiscoveredServerNames() {
- return (List<String>) getDiscoveredServers(Boolean.FALSE, StringListResponse.class);
+ public StringListResponse getDiscoveredServerNames() {
+
+ return (StringListResponse) getDiscoveredServers(Boolean.FALSE, StringListResponse.class);
}
- @SuppressWarnings("unchecked")
- public List<Server> getDiscoveredServerDetails() {
- return (List<Server>) getDiscoveredServers(Boolean.TRUE, ServerListResponse.class);
+ public ServerListResponse getDiscoveredServerDetails() {
+ return (ServerListResponse) getDiscoveredServers(Boolean.TRUE, ServerListResponse.class);
}
@SuppressWarnings("unchecked")
@@ -69,12 +63,11 @@ public class DiscoveredServersClient extends AbstractClient {
public static void main(String[] args) {
UsersClient usersClient = new UsersClient();
if (usersClient.authenticate("gluster", "gluster").isSuccess()) {
- DiscoveredServersClient serverResource = new DiscoveredServersClient("localhost",
- usersClient.getSecurityToken());
- List<String> discoveredServerNames = serverResource.getDiscoveredServerNames();
- System.out.println(discoveredServerNames);
- List<Server> discoveredServers = serverResource.getDiscoveredServerDetails();
- System.out.println(discoveredServers);
+ DiscoveredServersClient serverResource = new DiscoveredServersClient(usersClient.getSecurityToken());
+ StringListResponse discoveredServerNames = serverResource.getDiscoveredServerNames();
+ System.out.println(discoveredServerNames.getData());
+ ServerListResponse discoveredServers = serverResource.getDiscoveredServerDetails();
+ System.out.println(discoveredServers.getData());
// Server serverDetails = ServerResource.getServer("localhost");
// System.out.println(serverDetails.getName());
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 f98509f4..75b6affc 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
@@ -19,7 +19,6 @@
package com.gluster.storage.management.client;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.Map.Entry;
@@ -30,21 +29,20 @@ import com.gluster.storage.management.core.model.Cluster;
import com.gluster.storage.management.core.model.ClusterListener;
import com.gluster.storage.management.core.model.Disk;
import com.gluster.storage.management.core.model.Disk.DISK_STATUS;
-import com.gluster.storage.management.core.model.Entity;
import com.gluster.storage.management.core.model.Event;
import com.gluster.storage.management.core.model.Event.EVENT_TYPE;
import com.gluster.storage.management.core.model.GlusterDataModel;
import com.gluster.storage.management.core.model.GlusterServer;
-import com.gluster.storage.management.core.model.GlusterServer.SERVER_STATUS;
import com.gluster.storage.management.core.model.LogMessage;
-import com.gluster.storage.management.core.model.NetworkInterface;
import com.gluster.storage.management.core.model.Server;
import com.gluster.storage.management.core.model.Volume;
import com.gluster.storage.management.core.model.Volume.TRANSPORT_TYPE;
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.response.GlusterServerListResponse;
import com.gluster.storage.management.core.response.RunningTaskListResponse;
+import com.gluster.storage.management.core.response.ServerListResponse;
import com.gluster.storage.management.core.response.VolumeListResponse;
import com.gluster.storage.management.core.response.VolumeOptionInfoListResponse;
@@ -58,7 +56,6 @@ public class GlusterDataModelManager {
private static GlusterDataModelManager instance = new GlusterDataModelManager();
private GlusterDataModel model;
private String securityToken;
- private String serverName;
private List<ClusterListener> listeners = new ArrayList<ClusterListener>();
private List<VolumeOptionInfo> volumeOptionsDefaults;
@@ -80,43 +77,9 @@ public class GlusterDataModelManager {
public static GlusterDataModelManager getInstance() {
return instance;
}
-
- // Renamed preferredInterfaceName to interfaceName
- private GlusterServer addGlusterServer(List<GlusterServer> servers, Entity parent, String name,
- SERVER_STATUS status, String interfaceName, int numOfCPUs, double cpuUsage, double totalMemory,
- double memoryInUse) {
- GlusterServer glusterServer = new GlusterServer(name, parent, status, numOfCPUs, cpuUsage, totalMemory,
- memoryInUse);
- NetworkInterface networkInterface = addNetworkInterface(glusterServer, interfaceName); // Renamed
- // preferredInterfaceName
- // to
- // interfaceName
- // glusterServer.setPreferredNetworkInterface(networkInterface);
-
- servers.add(glusterServer);
- return glusterServer;
- }
-
- private NetworkInterface addNetworkInterface(Server server, String interfaceName) {
- NetworkInterface networkInterface = new NetworkInterface(interfaceName, server, "192.168.1."
- + Math.round(Math.random() * 255), "255.255.255.0", "192.168.1.1");
- server.setNetworkInterfaces(Arrays.asList(new NetworkInterface[] { networkInterface }));
- return networkInterface;
- }
-
- private void addDiscoveredServer(List<Server> 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/md1", totalDiskSpace, diskSpaceInUse, DISK_STATUS.READY));
- addNetworkInterface(server, "eth0");
-
- servers.add(server);
- }
-
public void initializeModel(String securityToken, String knownServer) {
model = new GlusterDataModel("Gluster Data Model");
setSecurityToken(securityToken);
-
Cluster cluster = new Cluster("Home", model);
initializeGlusterServers(cluster, knownServer);
@@ -124,8 +87,6 @@ public class GlusterDataModelManager {
initializeAutoDiscoveredServers(cluster);
initializeDisks();
- // addDisksToVolumes();
- // addVolumeOptions();
createDummyLogMessages();
@@ -136,6 +97,31 @@ public class GlusterDataModelManager {
model.addCluster(cluster);
}
+ private void initializeGlusterServers(Cluster cluster, String knownServer) {
+ GlusterServerListResponse glusterServerListResponse = new GlusterServersClient(securityToken).getServers(knownServer);
+ if (!glusterServerListResponse.getStatus().isSuccess()) {
+ throw new GlusterRuntimeException(glusterServerListResponse.getStatus().getMessage());
+ }
+ cluster.setServers(glusterServerListResponse.getServers());
+ }
+
+ private void initializeAutoDiscoveredServers(Cluster cluster) {
+ ServerListResponse discoveredServerListResponse = new DiscoveredServersClient(securityToken).getDiscoveredServerDetails();
+ if (!discoveredServerListResponse.getStatus().isSuccess()) {
+ throw new GlusterRuntimeException(discoveredServerListResponse.getStatus().getMessage());
+ }
+ cluster.setAutoDiscoveredServers(discoveredServerListResponse.getData());
+ }
+
+ private void initializeVolumes(Cluster cluster) {
+ VolumesClient volumeClient = new VolumesClient(securityToken);
+ VolumeListResponse response = volumeClient.getAllVolumes();
+ if (!response.getStatus().isSuccess()) {
+ throw new GlusterRuntimeException("Error fetching volume list: [" + response.getStatus() + "]");
+ }
+ cluster.setVolumes(response.getVolumes());
+ }
+
private void initializeVolumeOptionsDefaults() {
VolumeOptionInfoListResponse response = new VolumesClient(getSecurityToken()).getVolumeOptionsDefaults();
if (!response.getStatus().isSuccess()) {
@@ -144,6 +130,19 @@ public class GlusterDataModelManager {
}
this.volumeOptionsDefaults = response.getOptions();
}
+
+ public void initializeRunningTasks(Cluster cluster) {
+ RunningTaskListResponse runningTaskResponse = new RunningTaskClient(securityToken).getRunningTasks();
+ if (!runningTaskResponse.getStatus().isSuccess()) {
+ throw new GlusterRuntimeException(runningTaskResponse.getStatus().getMessage());
+ }
+ cluster.setRunningTasks(runningTaskResponse.getRunningTasks());
+ }
+
+ public void initializeAlerts(Cluster cluster) {
+ cluster.setAlerts(new AlertsClient(securityToken).getAllAlerts());
+ }
+
private void addVolumeOptions() {
for (Volume vol : new Volume[] { volume1, volume2, volume3, volume4, volume5 }) {
@@ -163,14 +162,6 @@ public class GlusterDataModelManager {
return volume;
}
- private void initializeVolumes(Cluster cluster) {
- VolumesClient volumeClient = new VolumesClient(securityToken);
- VolumeListResponse response = volumeClient.getAllVolumes();
- if (!response.getStatus().isSuccess()) {
- throw new GlusterRuntimeException("Error fetching volume list: [" + response.getStatus() + "]");
- }
- cluster.setVolumes(response.getVolumes());
- }
private void initializeDisks() {
s1da = new Disk(server1, "sda", "/export/md0", 100d, 80d, DISK_STATUS.READY);
@@ -182,7 +173,8 @@ public class GlusterDataModelManager {
s2dd = new Disk(server2, "sdd", "/export/md1", 200d, 124.89, DISK_STATUS.READY);
// disk name unavailable since server is offline
- s3da = new Disk(server3, "NA", "NA", -1d, -1d, DISK_STATUS.OFFLINE);
+
+ s3da = new Disk(server3, "NA", "/export/md0", -1d, -1d, DISK_STATUS.IO_ERROR);
s4da = new Disk(server4, "sda", "/export/md0", 100d, 85.39, DISK_STATUS.READY);
@@ -228,14 +220,6 @@ public class GlusterDataModelManager {
volume5.addDisk("server5:sdb");
}
- private void initializeGlusterServers(Cluster cluster, String knownServer) {
- cluster.setServers(new GlusterServersClient(securityToken).getServers(knownServer));
- }
-
- private void initializeAutoDiscoveredServers(Cluster cluster) {
- cluster.setAutoDiscoveredServers(new DiscoveredServersClient(serverName, securityToken)
- .getDiscoveredServerDetails());
- }
private void addMessages(List<LogMessage> messages, Disk disk, String severity, int count) {
for (int i = 1; i <= count; i++) {
@@ -251,17 +235,6 @@ public class GlusterDataModelManager {
addMessages(logMessages, disk, "INFO", 5);
}
- public void initializeRunningTasks(Cluster cluster) {
- RunningTaskListResponse runningTaskResponse = new RunningTaskClient(securityToken).getRunningTasks();
- if (!runningTaskResponse.getStatus().isSuccess()) {
- throw new GlusterRuntimeException(runningTaskResponse.getStatus().getMessage());
- }
- cluster.setRunningTasks(runningTaskResponse.getRunningTasks());
- }
-
- public void initializeAlerts(Cluster cluster) {
- cluster.setAlerts(new AlertsClient(securityToken).getAllAlerts());
- }
public List<LogMessage> createDummyLogMessages() {
addMessagesForDisk(logMessages, s1da);
diff --git a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterServersClient.java b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterServersClient.java
index 98b8878c..8368ceea 100644
--- a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterServersClient.java
+++ b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterServersClient.java
@@ -44,11 +44,11 @@ public class GlusterServersClient extends AbstractClient {
return RESOURCE_NAME;
}
- public List<GlusterServer> getServers(String knownServer) {
+ public GlusterServerListResponse getServers(String knownServer) {
MultivaluedMap<String, String> queryParams = new MultivaluedMapImpl();
queryParams.add(RESTConstants.QUERY_PARAM_KNOWN_SERVER, knownServer);
GlusterServerListResponse response = (GlusterServerListResponse) fetchResource(queryParams, GlusterServerListResponse.class);
- return response.getServers();
+ return response; //.getServers();
}
@SuppressWarnings("unchecked")
@@ -77,8 +77,8 @@ public class GlusterServersClient extends AbstractClient {
UsersClient usersClient = new UsersClient();
if (usersClient.authenticate("gluster", "gluster").isSuccess()) {
- GlusterServersClient serverResource = new GlusterServersClient(usersClient.getSecurityToken());
- List<GlusterServer> glusterServers = serverResource.getServers("127.0.0.1");
+ GlusterServersClient glusterServersClient = new GlusterServersClient(usersClient.getSecurityToken());
+ List<GlusterServer> glusterServers = glusterServersClient.getServers("127.0.0.1").getData();
for (GlusterServer server : glusterServers) {
System.out.println(server.getName());
}
@@ -86,7 +86,7 @@ public class GlusterServersClient extends AbstractClient {
// Add server
Server srv = new Server();
srv.setName("server3");
- GlusterServerResponse response = serverResource.addServer(srv);
+ GlusterServerResponse response = glusterServersClient.addServer(srv);
System.out.println(response.getGlusterServer().getName());
System.out.println(response.getStatus().isSuccess());
diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/constants/CoreConstants.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/constants/CoreConstants.java
index b5e25ce7..85a84c4a 100644
--- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/constants/CoreConstants.java
+++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/constants/CoreConstants.java
@@ -31,4 +31,5 @@ public class CoreConstants {
public static final String DATE_WITH_TIME_FORMAT = "MM/dd/yyyy HH:mm:ss";
public static final String PURE_DATE_FORMAT = "MM/dd/yyyy";
public static final String PURE_TIME_FORMAT = "HH:mm:ss.SSS";
+ public static final String NA = "NA";
}
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 dfb4e57e..7b6ee0fd 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
@@ -25,10 +25,10 @@ import com.gluster.storage.management.core.utils.StringUtil;
@XmlRootElement(name="Disk")
public class Disk extends Entity {
public enum DISK_STATUS {
- READY, UNINITIALIZED, INITIALIZING, OFFLINE
+ READY, UNINITIALIZED, INITIALIZING, IO_ERROR
};
- private String[] DISK_STATUS_STR = { "Ready", "Uninitialized", "Initializing", "Offline" };
+ private String[] DISK_STATUS_STR = { "Ready", "Uninitialized", "Initializing", "I/O Error" };
private String serverName;
private String mountPoint;
@@ -52,8 +52,8 @@ public class Disk extends Entity {
return getStatus() == DISK_STATUS.UNINITIALIZED;
}
- public boolean isOffline() {
- return getStatus() == DISK_STATUS.OFFLINE;
+ public boolean hasErrors() {
+ return getStatus() == DISK_STATUS.IO_ERROR;
}
public boolean isReady() {
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 979fe260..eed67904 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
@@ -56,16 +56,15 @@ public class GlusterDummyModel {
double memoryInUse) {
GlusterServer glusterServer = new GlusterServer(name, parent, status, numOfCPUs, cpuUsage, totalMemory,
memoryInUse);
- NetworkInterface networkInterface = addNetworkInterface(glusterServer, interfaceName); // Renamed preferredInterfaceName to interfaceName
- // glusterServer.setPreferredNetworkInterface(networkInterface);
+ NetworkInterface networkInterface = addNetworkInterface(glusterServer, interfaceName);
servers.add(glusterServer);
return glusterServer;
}
private NetworkInterface addNetworkInterface(Server server, String interfaceName) {
- NetworkInterface networkInterface = new NetworkInterface(interfaceName, server, "192.168.1."
- + Math.round(Math.random() * 255), "255.255.255.0", "192.168.1.1");
+ NetworkInterface networkInterface = new NetworkInterface(interfaceName, server, "00:00:00:00", "IPV6-IN-IPV4",
+ "1000MB/S", "192.168.1." + Math.round(Math.random() * 255), "255.255.255.0", "192.168.1.1");
server.setNetworkInterfaces(Arrays.asList(new NetworkInterface[] { networkInterface }));
return networkInterface;
}
@@ -148,9 +147,6 @@ public class GlusterDummyModel {
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);
- // disk name unavailable since server is offline
- s3da = new Disk(server3, "NA", "NA", -1d, -1d, DISK_STATUS.OFFLINE); // disk name unavailable since server is offline
-
s4da = new Disk(server4, "sda", "/export/md0", 100d, 85.39, DISK_STATUS.READY);
s5da = new Disk(server5, "sda", "/export/md1", 100d, 92.83, DISK_STATUS.READY);
@@ -246,29 +242,29 @@ public class GlusterDummyModel {
public static List<LogMessage> getDummyLogMessages() {
return logMessages;
}
-
+
public Disk getVolumeDisk(String volumeDisk) {
List<Disk> allDisks = getReadyDisksOfAllServers();
String brickInfo[] = volumeDisk.split(":");
- for( Disk disk: allDisks) {
+ for (Disk disk : allDisks) {
if (disk.getServerName() == brickInfo[0] && disk.getName() == brickInfo[1]) {
return disk;
}
}
return null;
}
-
+
public List<Disk> getReadyDisksOfVolume(Volume volume) {
-// List<Disk> disks = new ArrayList<Disk>();
-// for (Disk disk : volume.getDisks()) {
-// if (disk.isReady()) {
-// disks.add(disk);
-// }
-// }
-// return disks;
+ // List<Disk> disks = new ArrayList<Disk>();
+ // for (Disk disk : volume.getDisks()) {
+ // if (disk.isReady()) {
+ // disks.add(disk);
+ // }
+ // }
+ // return disks;
Disk disk = null;
List<Disk> volumeDisks = new ArrayList<Disk>();
- for (String volumeDisk : volume.getDisks() ) {
+ for (String volumeDisk : volume.getDisks()) {
disk = getVolumeDisk(volumeDisk);
if (disk != null && disk.isReady()) {
volumeDisks.add(disk);
@@ -291,7 +287,7 @@ public class GlusterDummyModel {
public List<Disk> getReadyDisksOfAllServersExcluding(List<Disk> excludeDisks) {
List<Disk> disks = new ArrayList<Disk>();
-
+
for (Server server : ((Cluster) model.getChildren().get(0)).getServers()) {
for (Disk disk : server.getDisks()) {
if (disk.isReady() && !excludeDisks.contains(disk)) {
diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/GlusterServer.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/GlusterServer.java
index fd4e58c9..a9455f48 100644
--- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/GlusterServer.java
+++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/GlusterServer.java
@@ -33,7 +33,6 @@ public class GlusterServer extends Server {
private String uuid;
private SERVER_STATUS status;
- // private NetworkInterface preferredNetworkInterface;
private Cluster cluster;
public GlusterServer() {
@@ -54,6 +53,10 @@ public class GlusterServer extends Server {
this(name, parent, status, numOfCPUs, cpuUsage, totalMemory, memoryInUse);
setCluster(cluster);
}
+
+ public Boolean isOnline() {
+ return getStatus() == SERVER_STATUS.ONLINE;
+ }
public String getStatusStr() {
return STATUS_STR[getStatus().ordinal()];
diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/NetworkInterface.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/NetworkInterface.java
index 882dfe09..c0521ef3 100644
--- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/NetworkInterface.java
+++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/NetworkInterface.java
@@ -20,24 +20,29 @@ package com.gluster.storage.management.core.model;
import javax.xml.bind.annotation.XmlRootElement;
-@XmlRootElement(name="networkInterface")
+@XmlRootElement(name = "networkInterface")
public class NetworkInterface extends Entity {
+ private String hwAddr;
+ private String model;
+ private String speed;
private String ipAddress;
private String netMask;
private String defaultGateway;
-// private boolean isPreferred;
-
+
public NetworkInterface() {
-
+
}
-// public boolean isPreferred() {
-// return isPreferred;
-// }
-//
-// public void setPreferred(boolean isPreferred) {
-// this.isPreferred = isPreferred;
-// }
+ public NetworkInterface(String name, Entity parent, String hwAddr, String model, String speed, String ipAddress,
+ String netMask, String defaultGateway) {
+ super(name, parent);
+ setHwAddr(hwAddr);
+ setModel(model);
+ setSpeed(speed);
+ setIpAddress(ipAddress);
+ setNetMask(netMask);
+ setDefaultGateway(defaultGateway);
+ }
public String getIpAddress() {
return ipAddress;
@@ -63,11 +68,28 @@ public class NetworkInterface extends Entity {
this.defaultGateway = defaultGateway;
}
- public NetworkInterface(String name, Entity parent, String ipAddress, String netMask, String defaultGateway) {
- super(name, parent);
- setIpAddress(ipAddress);
- setNetMask(netMask);
- setDefaultGateway(defaultGateway);
+ public String getHwAddr() {
+ return hwAddr;
}
-
+
+ public void setHwAddr(String hwAddr) {
+ this.hwAddr = hwAddr;
+ }
+
+ public String getModel() {
+ return model;
+ }
+
+ public void setModel(String model) {
+ this.model = model;
+ }
+
+ public String getSpeed() {
+ return speed;
+ }
+
+ public void setSpeed(String speed) {
+ this.speed = speed;
+ }
+
}
diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Server.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Server.java
index 4f870eaf..256b9ec4 100644
--- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Server.java
+++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Server.java
@@ -133,7 +133,7 @@ public class Server extends Entity {
}
public void addDisk(Disk disk) {
- if (disks.add(disk)) {
+ if (disks.add(disk) && disk.isReady()) {
totalDiskSpace += disk.getSpace();
diskSpaceInUse += disk.getSpaceInUse();
}
@@ -180,4 +180,19 @@ public class Server extends Entity {
public boolean filter(String filterString, boolean caseSensitive) {
return StringUtil.filterString(getName() + getIpAddressesAsString(), filterString, caseSensitive);
}
+
+ @SuppressWarnings("unchecked")
+ public void copyFrom(Server server) {
+ this.setName(server.getName());
+ this.setParent(server.getParent());
+ this.setChildren(( List<Entity>) server.getChildren());
+ this.setNetworkInterfaces(server.getNetworkInterfaces());
+ this.setNumOfCPUs(server.getNumOfCPUs());
+ this.setCpuUsage(server.getCpuUsage());
+ this.setTotalMemory(server.getTotalMemory());
+ this.setMemoryInUse(server.getMemoryInUse());
+ this.setTotalDiskSpace(server.getTotalDiskSpace());
+ this.setDiskSpaceInUse(server.getDiskSpaceInUse());
+ this.setDisks(server.getDisks());
+ }
}
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 9b258be1..3f7ac4f1 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
@@ -42,7 +42,7 @@ public class DiskTableLabelProvider extends TableLabelProviderAdapter {
switch (status) {
case READY:
return guiHelper.getImage(IImageKeys.STATUS_ONLINE);
- case OFFLINE:
+ case IO_ERROR:
return guiHelper.getImage(IImageKeys.STATUS_OFFLINE);
case UNINITIALIZED:
return guiHelper.getImage(IImageKeys.DISK_UNINITIALIZED);
@@ -65,7 +65,7 @@ public class DiskTableLabelProvider extends TableLabelProviderAdapter {
}
private String getDiskSpace(Disk disk) {
- if (disk.isOffline()) {
+ if (disk.hasErrors() || disk.isUninitialized()) {
return "NA";
} else {
return NumberUtil.formatNumber(disk.getSpace());
diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/NetworkInterfaceTableLabelProvider.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/NetworkInterfaceTableLabelProvider.java
index d7b700d4..78f703ea 100644
--- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/NetworkInterfaceTableLabelProvider.java
+++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/NetworkInterfaceTableLabelProvider.java
@@ -19,6 +19,7 @@
package com.gluster.storage.management.gui;
+import com.gluster.storage.management.core.constants.CoreConstants;
import com.gluster.storage.management.core.model.NetworkInterface;
import com.gluster.storage.management.gui.views.details.tabcreators.GlusterServerTabCreator.NETWORK_INTERFACE_TABLE_COLUMN_INDICES;
@@ -30,11 +31,13 @@ public class NetworkInterfaceTableLabelProvider extends TableLabelProviderAdapte
}
NetworkInterface networkInterface = (NetworkInterface) element;
- return (columnIndex == NETWORK_INTERFACE_TABLE_COLUMN_INDICES.INTERFACE.ordinal() ? networkInterface.getName()
+ String columnText = (columnIndex == NETWORK_INTERFACE_TABLE_COLUMN_INDICES.INTERFACE.ordinal() ? networkInterface.getName()
+ : columnIndex == NETWORK_INTERFACE_TABLE_COLUMN_INDICES.MODEL.ordinal() ? networkInterface.getModel()
+ : columnIndex == NETWORK_INTERFACE_TABLE_COLUMN_INDICES.SPEED.ordinal() ? networkInterface.getSpeed()
: columnIndex == NETWORK_INTERFACE_TABLE_COLUMN_INDICES.IP_ADDRESS.ordinal() ? networkInterface.getIpAddress()
: columnIndex == NETWORK_INTERFACE_TABLE_COLUMN_INDICES.NETMASK.ordinal() ? networkInterface.getNetMask()
: columnIndex == NETWORK_INTERFACE_TABLE_COLUMN_INDICES.GATEWAY.ordinal() ? networkInterface.getDefaultGateway()
- // : columnIndex == NETWORK_INTERFACE_TABLE_COLUMN_INDICES.PREFERRED.ordinal() ? (networkInterface.isPreferred() ? "Yes" : "No")
: "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/ServerDiskTableLabelProvider.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/ServerDiskTableLabelProvider.java
index cd5fab62..a07c64bf 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
@@ -20,6 +20,7 @@ package com.gluster.storage.management.gui;
import org.eclipse.swt.graphics.Image;
+import com.gluster.storage.management.core.constants.CoreConstants;
import com.gluster.storage.management.core.exceptions.GlusterRuntimeException;
import com.gluster.storage.management.core.model.Disk;
import com.gluster.storage.management.core.model.Disk.DISK_STATUS;
@@ -43,7 +44,7 @@ public class ServerDiskTableLabelProvider extends TableLabelProviderAdapter {
switch (status) {
case READY:
return guiHelper.getImage(IImageKeys.STATUS_ONLINE);
- case OFFLINE:
+ case IO_ERROR:
return guiHelper.getImage(IImageKeys.STATUS_OFFLINE);
case UNINITIALIZED:
return guiHelper.getImage(IImageKeys.DISK_UNINITIALIZED);
@@ -58,16 +59,16 @@ public class ServerDiskTableLabelProvider extends TableLabelProviderAdapter {
}
private String getDiskSpaceInUse(Disk disk) {
- if(disk.isReady()) {
- return NumberUtil.formatNumber(disk.getSpaceInUse());
+ if(disk.hasErrors() || disk.isUninitialized()) {
+ return CoreConstants.NA;
} else {
- return "NA";
+ return NumberUtil.formatNumber(disk.getSpaceInUse());
}
}
private String getDiskSpace(Disk disk) {
- if(disk.isOffline()) {
- return "NA";
+ if(disk.hasErrors() || disk.isUninitialized()) {
+ return CoreConstants.NA;
} else {
return NumberUtil.formatNumber(disk.getSpace());
}
@@ -78,13 +79,13 @@ public class ServerDiskTableLabelProvider extends TableLabelProviderAdapter {
if (!(element instanceof Disk)) {
return null;
}
-
Disk disk = (Disk) element;
- return (columnIndex == SERVER_DISK_TABLE_COLUMN_INDICES.DISK.ordinal() ? disk.getName()
- : columnIndex == SERVER_DISK_TABLE_COLUMN_INDICES.SPACE.ordinal() ? getDiskSpace(disk)
+ 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.STATUS.ordinal() ? 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/views/GlusterServerSummaryView.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/GlusterServerSummaryView.java
index d43cab15..8d3217f1 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
@@ -57,11 +57,11 @@ public class GlusterServerSummaryView extends ViewPart {
private GlusterServer server;
public enum NETWORK_INTERFACE_TABLE_COLUMN_INDICES {
- INTERFACE, IP_ADDRESS, NETMASK, GATEWAY
+ INTERFACE, MODEL, SPEED, IP_ADDRESS, NETMASK, GATEWAY
};
- private static final String[] NETWORK_INTERFACE_TABLE_COLUMN_NAMES = { "Interface", "IP Address", "Netmask",
- "Gateway" };
+ private static final String[] NETWORK_INTERFACE_TABLE_COLUMN_NAMES = { "Interface", "Model", "Speed", "IP Address",
+ "Netmask", "Gateway" };
@Override
public void createPartControl(Composite parent) {
@@ -206,10 +206,11 @@ public class GlusterServerSummaryView extends ViewPart {
parent.setLayout(tableColumnLayout);
setColumnProperties(table, NETWORK_INTERFACE_TABLE_COLUMN_INDICES.INTERFACE, SWT.CENTER, 70);
+ setColumnProperties(table, NETWORK_INTERFACE_TABLE_COLUMN_INDICES.MODEL, SWT.CENTER, 70);
+ setColumnProperties(table, NETWORK_INTERFACE_TABLE_COLUMN_INDICES.SPEED, SWT.CENTER, 70);
setColumnProperties(table, NETWORK_INTERFACE_TABLE_COLUMN_INDICES.IP_ADDRESS, SWT.CENTER, 100);
setColumnProperties(table, NETWORK_INTERFACE_TABLE_COLUMN_INDICES.NETMASK, SWT.CENTER, 70);
setColumnProperties(table, NETWORK_INTERFACE_TABLE_COLUMN_INDICES.GATEWAY, SWT.CENTER, 70);
- // setColumnProperties(table, NETWORK_INTERFACE_TABLE_COLUMN_INDICES.PREFERRED, SWT.CENTER, 70);
}
private Composite createTableViewerComposite(Composite parent) {
diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/details/tabcreators/GlusterServerTabCreator.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/details/tabcreators/GlusterServerTabCreator.java
index e1aa59ff..00318373 100644
--- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/details/tabcreators/GlusterServerTabCreator.java
+++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/details/tabcreators/GlusterServerTabCreator.java
@@ -58,18 +58,18 @@ import com.richclientgui.toolbox.gauges.CoolGauge;
public class GlusterServerTabCreator implements TabCreator {
public enum NETWORK_INTERFACE_TABLE_COLUMN_INDICES {
- INTERFACE, IP_ADDRESS, NETMASK, GATEWAY
+ INTERFACE, MODEL, SPEED, IP_ADDRESS, NETMASK, GATEWAY
};
- private static final String[] NETWORK_INTERFACE_TABLE_COLUMN_NAMES = { "Interface", "IP Address", "Netmask",
- "Gateway" };
+ private static final String[] NETWORK_INTERFACE_TABLE_COLUMN_NAMES = { "Interface", "Model", "Speed", "IP Address",
+ "Netmask", "Gateway" };
private static final GUIHelper guiHelper = GUIHelper.getInstance();
private void createServerSummarySection(GlusterServer server, FormToolkit toolkit, final ScrolledForm form) {
Composite section = guiHelper.createSection(form, toolkit, "Summary", null, 2, false);
-// toolkit.createLabel(section, "Preferred Network: ", SWT.NONE);
-// toolkit.createLabel(section, server.getPreferredNetworkInterface().getName(), SWT.NONE);
+ // toolkit.createLabel(section, "Preferred Network: ", SWT.NONE);
+ // toolkit.createLabel(section, server.getPreferredNetworkInterface().getName(), SWT.NONE);
boolean online = server.getStatus() == SERVER_STATUS.ONLINE;
@@ -168,6 +168,8 @@ public class GlusterServerTabCreator implements TabCreator {
parent.setLayout(tableColumnLayout);
setColumnProperties(table, NETWORK_INTERFACE_TABLE_COLUMN_INDICES.INTERFACE, SWT.CENTER, 70);
+ setColumnProperties(table, NETWORK_INTERFACE_TABLE_COLUMN_INDICES.MODEL, SWT.CENTER, 70);
+ setColumnProperties(table, NETWORK_INTERFACE_TABLE_COLUMN_INDICES.SPEED, SWT.CENTER, 70);
setColumnProperties(table, NETWORK_INTERFACE_TABLE_COLUMN_INDICES.IP_ADDRESS, SWT.CENTER, 100);
setColumnProperties(table, NETWORK_INTERFACE_TABLE_COLUMN_INDICES.NETMASK, SWT.CENTER, 70);
setColumnProperties(table, NETWORK_INTERFACE_TABLE_COLUMN_INDICES.GATEWAY, SWT.CENTER, 70);
@@ -217,19 +219,20 @@ public class GlusterServerTabCreator implements TabCreator {
private Composite createNetworkInterfacesSection(GlusterServer server, FormToolkit toolkit, ScrolledForm form) {
final Composite section = guiHelper.createSection(form, toolkit, "Network Interfaces", null, 1, false);
createNetworkInterfacesTableViewer(createTableViewerComposite(section), server);
-// Hyperlink changePreferredNetworkLink = toolkit.createHyperlink(section, "Change Preferred Network", SWT.NONE);
-// changePreferredNetworkLink.addHyperlinkListener(new HyperlinkAdapter() {
-//
-// @Override
-// public void linkActivated(HyperlinkEvent e) {
-// new MessageDialog(
-// section.getShell(),
-// "Gluster Storage Platform",
-// guiHelper.getImage(IImageKeys.SERVER),
-// "This will show additional controls to help user choose a new network interface. TO BE IMPLEMENTED.",
-// MessageDialog.INFORMATION, new String[] { "OK" }, 0).open();
-// }
-// });
+ // Hyperlink changePreferredNetworkLink = toolkit.createHyperlink(section, "Change Preferred Network",
+ // SWT.NONE);
+ // changePreferredNetworkLink.addHyperlinkListener(new HyperlinkAdapter() {
+ //
+ // @Override
+ // public void linkActivated(HyperlinkEvent e) {
+ // new MessageDialog(
+ // section.getShell(),
+ // "Gluster Storage Platform",
+ // guiHelper.getImage(IImageKeys.SERVER),
+ // "This will show additional controls to help user choose a new network interface. TO BE IMPLEMENTED.",
+ // MessageDialog.INFORMATION, new String[] { "OK" }, 0).open();
+ // }
+ // });
return section;
}
@@ -241,7 +244,8 @@ public class GlusterServerTabCreator implements TabCreator {
serverLogsTab.layout(); // IMP: lays out the form properly
}
- private void createServerDisksTab(GlusterServer server, TabFolder tabFolder, FormToolkit toolkit, IWorkbenchSite site) {
+ private void createServerDisksTab(GlusterServer server, TabFolder tabFolder, FormToolkit toolkit,
+ IWorkbenchSite site) {
Composite serverDisksTab = guiHelper.createTab(tabFolder, "Disks", IImageKeys.SERVER);
ServerDisksPage page = new ServerDisksPage(serverDisksTab, SWT.NONE, site, server.getDisks());
diff --git a/src/com.gluster.storage.management.server.scripts/src/common/NetworkUtils.py b/src/com.gluster.storage.management.server.scripts/src/common/NetworkUtils.py
index f8a5de30..7a854564 100644
--- a/src/com.gluster.storage.management.server.scripts/src/common/NetworkUtils.py
+++ b/src/com.gluster.storage.management.server.scripts/src/common/NetworkUtils.py
@@ -177,6 +177,26 @@ def writeIfcfgConfFile(deviceName, conf, root="", deviceFile=None):
return True
+def getNetModel(deviceName):
+ rv = runCommandFG("ifconfig %s" % deviceName, stdout=True, root=True)
+ if rv["Status"] != 0:
+ return False
+ for line in rv["Stdout"].split():
+ tokens = line.strip().split(":")
+ if tokens[0].upper() == "ENCAP":
+ return tokens[1].strip().upper()
+ return None
+
+def getNetSpeed(deviceName):
+ rv = runCommandFG("ethtool %s" % deviceName, stdout=True, root=True)
+ if rv["Status"] != 0:
+ return False
+ for line in rv["Stdout"].split("\n"):
+ tokens = line.strip().split(":")
+ if tokens[0].upper() == "SPEED":
+ return tokens[1].strip().upper()
+ return None
+
def getLinkStatus(deviceName):
return True
## ethtool takes very long time to respond. So its disabled now
@@ -276,6 +296,9 @@ def getNetDeviceList(root=""):
netDevice["type"] = None
netDevice["link"] = getLinkStatus(deviceName)
netDevice["mode"] = getBondMode(deviceName, root + Globals.MODPROBE_CONF_FILE)
+ netDevice["model"] = getNetModel(deviceName)
+ netDevice["speed"] = getNetSpeed(deviceName)
+
try:
netDevice["hwaddr"] = open("/sys/class/net/%s/address" % deviceName).read().strip()
except IOError:
diff --git a/src/com.gluster.storage.management.server.scripts/src/nodes/Disk.py b/src/com.gluster.storage.management.server.scripts/src/nodes/Disk.py
index 6a4c2998..a1ab9264 100644
--- a/src/com.gluster.storage.management.server.scripts/src/nodes/Disk.py
+++ b/src/com.gluster.storage.management.server.scripts/src/nodes/Disk.py
@@ -80,6 +80,8 @@ class Disk:
else: # iterate over children looking for a volume
children = self.hal.FindDeviceStringMatch("info.parent",
device)
+ if not children and "disk" == dev.GetProperty("storage.drive_type"):
+ self._add_volume(dev)
for child in children:
child = self._get_device(child)
if child.GetProperty("block.is_volume"):
@@ -88,6 +90,23 @@ class Disk:
def _add_volume(self, dev, parent=None):
volume = str(dev.GetProperty('block.device'))
+ if not parent:
+ self.volumes.append ({
+ 'device' : volume,
+ 'label' : str(dev.GetProperty('block.device')),
+ 'fstype' : None,
+ 'fsversion': None,
+ 'uuid' : None,
+ 'interface': str(dev.GetProperty('storage.bus')),
+ 'parent' : None,
+ 'description': str(dev.GetProperty('storage.model')) + " " + str(dev.GetProperty('storage.vendor')),
+ 'size' : None,
+ 'totalsize' : str(int(dev.GetProperty('storage.size')) / 1024**2),
+ 'drive_type': str(dev.GetProperty('storage.drive_type')),
+ 'mount_point': "NA"
+ })
+ return
+
self.volumes.append ({
'device' : volume,
'label' : str(dev.GetProperty('volume.label')),
@@ -102,6 +121,7 @@ class Disk:
'drive_type': str(parent.GetProperty('storage.drive_type')),
'mount_point': str(dev.GetProperty('volume.mount_point'))
})
+ return
def _get_device(self, udi):
""" Return a dbus Interface to a specific HAL device UDI """
diff --git a/src/com.gluster.storage.management.server.scripts/src/nodes/get_server_details.py b/src/com.gluster.storage.management.server.scripts/src/nodes/get_server_details.py
index 67148586..932be8d7 100755
--- a/src/com.gluster.storage.management.server.scripts/src/nodes/get_server_details.py
+++ b/src/com.gluster.storage.management.server.scripts/src/nodes/get_server_details.py
@@ -117,16 +117,18 @@ def getServerDetails():
#TODO: probe and retrieve timezone, ntp-server, preferred-network details and update the tags
deviceList = {}
+ interfaces = responseDom.createTag("networkInterfaces", None)
for device in getNetDeviceList():
deviceList[device["device"]] = device
try:
macAddress = open("/sys/class/net/%s/address" % device["device"]).read().strip()
except IOError:
continue
- interfaces = responseDom.createTag("networkInterfaces", None)
interfaceTag = responseDom.createTag("networkInterface", None)
interfaceTag.appendChild(responseDom.createTag("name", device["device"]))
- interfaceTag.appendChild(responseDom.createTag("hwaddr", macAddress))
+ interfaceTag.appendChild(responseDom.createTag("hwAddr", macAddress))
+ interfaceTag.appendChild(responseDom.createTag("speed", device["speed"]))
+ interfaceTag.appendChild(responseDom.createTag("model", device["model"]))
if deviceList[device["device"]]:
if deviceList[device["device"]]["onboot"]:
interfaceTag.appendChild(responseDom.createTag("onboot", "yes"))
@@ -147,6 +149,7 @@ def getServerDetails():
interfaceTag.appendChild(responseDom.createTag("bootProto", "none"))
interfaces.appendChild(interfaceTag)
serverTag.appendChild(interfaces)
+
responseDom.appendTag(serverTag)
serverTag.appendChild(responseDom.createTag("numOfCPUs", int(os.sysconf('SC_NPROCESSORS_ONLN'))))
@@ -192,14 +195,21 @@ def getServerDetails():
partitionTag.appendChild(responseDom.createTag("mountPoint", disk['mount_point']))
partitionTag.appendChild(responseDom.createTag("serverName", serverName))
partitionTag.appendChild(responseDom.createTag("description", disk['description']))
- total, used, free = getDiskSizeInfo(disk['device'])
+ total, used, free = 0, 0, 0
+ if disk['size']:
+ total, used, free = getDiskSizeInfo(disk['device'])
if total:
partitionTag.appendChild(responseDom.createTag("space", str(total)))
totalDiskSpace += total
+ else:
+ partitionTag.appendChild(responseDom.createTag("space", "NA"))
if used:
partitionTag.appendChild(responseDom.createTag("spaceInUse", str(used)))
diskSpaceInUse += used
partitionTag.appendChild(responseDom.createTag("status", "READY"))
+ else:
+ partitionTag.appendChild(responseDom.createTag("spaceInUse", "NA"))
+ partitionTag.appendChild(responseDom.createTag("status", "UNINITIALIZED"))
diskTag.appendChild(partitionTag)
serverTag.appendChild(diskTag)
serverTag.appendChild(responseDom.createTag("totalDiskSpace", str(totalDiskSpace)))
diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/AbstractServersResource.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/AbstractServersResource.java
index 13147465..8c7f54ae 100644
--- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/AbstractServersResource.java
+++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/AbstractServersResource.java
@@ -20,17 +20,22 @@
*/
package com.gluster.storage.management.server.resources;
-import com.gluster.storage.management.core.model.Disk;
-import com.gluster.storage.management.core.model.NetworkInterface;
+import com.gluster.storage.management.core.exceptions.GlusterRuntimeException;
import com.gluster.storage.management.core.model.Server;
+import com.gluster.storage.management.core.model.Status;
+import com.gluster.storage.management.server.utils.GlusterUtil;
+import com.gluster.storage.management.server.utils.ServerUtil;
+import com.sun.jersey.api.core.InjectParam;
/**
* Abstract resource class for servers. Abstracts basic server related functionality like "get server details".
*/
public class AbstractServersResource {
- // TODO: Used for generating dummy ip address. To be removed after implementing actual logic for fetching server
- // details
- private static int ipCount = 1;
+ @InjectParam
+ private ServerUtil serverUtil;
+
+ @InjectParam
+ private GlusterUtil glusterUtil;
/**
* Fetch details of the given server. The server name must be populated in the object before calling this method.
@@ -39,41 +44,19 @@ public class AbstractServersResource {
* Server whose details are to be fetched
*/
protected void fetchServerDetails(Server server) {
- String serverName = server.getName();
-
- // TODO: Fetch the server details and populate in the object.
- // For now, populating dummy data.
- populateDummyData(server);
- }
-
- /**
- * @param server
- */
- private void populateDummyData(Server server) {
- server.setNumOfCPUs((int) (Math.ceil(Math.random() * 8)));
- server.setCpuUsage(Math.random() * 100);
- server.setTotalMemory(Math.ceil(Math.random() * 8));
- server.setMemoryInUse(Math.random() * server.getTotalMemory());
- addDummyDisks(server);
- addDummyNetworkInterfaces(server, (int) Math.ceil(Math.random() * 4));
+ // fetch standard server details like cpu, disk, memory details
+ Object response = serverUtil.executeOnServer(true, server.getName(), "get_server_details.py", Server.class);
+ if (response instanceof Status) {
+ throw new GlusterRuntimeException(((Status)response).getMessage());
+ }
+ server.copyFrom((Server) response); // Update the details in <Server> object
}
- private void addDummyNetworkInterfaces(Server server, int interfaceCount) {
- for (int i = 0; i < interfaceCount; i++) {
- server.addNetworkInterface(new NetworkInterface("eth" + i, server, "192.168.1." + ipCount++,
- "255.255.255.0", "192.168.1.1"));
- }
+ protected void setGlusterUtil(GlusterUtil glusterUtil) {
+ this.glusterUtil = glusterUtil;
}
- /**
- * @param server
- */
- private void addDummyDisks(Server server) {
- double dummyDiskSpace = Math.random() * 500;
- server.addDisk(new Disk(server, "sda", "/export/md0", dummyDiskSpace, Math.random() * dummyDiskSpace, Disk.DISK_STATUS.READY));
- dummyDiskSpace = Math.random() * 500;
- server.addDisk(new Disk(server, "sdb", "/export/md1", dummyDiskSpace, Math.random() * dummyDiskSpace, Disk.DISK_STATUS.READY));
- dummyDiskSpace = Math.random() * 500;
- server.addDisk(new Disk(server, "sdc", "/export/md2", dummyDiskSpace, Math.random() * dummyDiskSpace, Disk.DISK_STATUS.READY));
+ protected GlusterUtil getGlusterUtil() {
+ return glusterUtil;
}
}
diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/DiscoveredServersResource.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/DiscoveredServersResource.java
index c1ddffd1..eba06bf5 100644
--- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/DiscoveredServersResource.java
+++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/DiscoveredServersResource.java
@@ -30,11 +30,15 @@ import javax.ws.rs.core.MediaType;
import org.springframework.stereotype.Component;
+import com.gluster.storage.management.core.constants.CoreConstants;
import com.gluster.storage.management.core.model.Response;
import com.gluster.storage.management.core.model.Server;
import com.gluster.storage.management.core.model.Status;
+import com.gluster.storage.management.core.response.GenericResponse;
import com.gluster.storage.management.core.response.ServerListResponse;
import com.gluster.storage.management.core.response.StringListResponse;
+import com.gluster.storage.management.server.utils.ServerUtil;
+import com.sun.jersey.api.core.InjectParam;
import com.sun.jersey.spi.resource.Singleton;
@Component
@@ -42,29 +46,48 @@ import com.sun.jersey.spi.resource.Singleton;
@Path("/discoveredservers")
public class DiscoveredServersResource extends AbstractServersResource {
private List<String> discoveredServerNames = new ArrayList<String>();
-
+
public List<String> getDiscoveredServerNames() {
return discoveredServerNames;
}
+
@GET
@Produces(MediaType.TEXT_XML)
+ @SuppressWarnings("rawtypes")
public Response getDiscoveredServers(@QueryParam("details") Boolean getDetails) {
if(getDetails != null && getDetails == true) {
- return new ServerListResponse(Status.STATUS_SUCCESS, getDiscoveredServerDetails());
+ return getDiscoveredServerDetails();
}
return new StringListResponse(getDiscoveredServerNames());
}
- private List<Server> getDiscoveredServerDetails() {
+ private ServerListResponse getDiscoveredServerDetails() {
List<Server> discoveredServers = new ArrayList<Server>();
List<String> serverNames = getDiscoveredServerNames();
+ GenericResponse<Server> discoveredServerResponse;
+ int errCount = 0;
+ StringBuilder errMsg = new StringBuilder("Couldn't fetch details for server(s): ");
for (String serverName : serverNames) {
- discoveredServers.add(getDiscoveredServer(serverName));
+ discoveredServerResponse = getDiscoveredServer(serverName);
+ if (!discoveredServerResponse.getStatus().isSuccess()) {
+ errMsg.append(CoreConstants.NEWLINE + serverName + " : " + discoveredServerResponse.getStatus());
+ errCount++;
+ } else {
+ discoveredServers.add(discoveredServerResponse.getData());
+ }
+ }
+ Status status = null;
+ if(errCount == 0) {
+ status = new Status(Status.STATUS_CODE_SUCCESS, "Success");
+ } else if(errCount == serverNames.size()) {
+ status = new Status(Status.STATUS_CODE_FAILURE, errMsg.toString());
+ } else {
+ status = new Status(Status.STATUS_CODE_PART_SUCCESS, errMsg.toString());
}
- return discoveredServers;
+ return new ServerListResponse(status, discoveredServers);
}
-
+
public void setDiscoveredServerNames(List<String> discoveredServerNames) {
synchronized (discoveredServerNames) {
this.discoveredServerNames = discoveredServerNames;
@@ -74,12 +97,16 @@ public class DiscoveredServersResource extends AbstractServersResource {
@Path("/{serverName}")
@GET
@Produces(MediaType.TEXT_XML)
- public Server getDiscoveredServer(@PathParam("serverName") String serverName) {
+ public GenericResponse<Server> getDiscoveredServer(@PathParam("serverName") String serverName) {
Server server = new Server(serverName);
- fetchServerDetails(server);
- return server;
+ try {
+ fetchServerDetails(server);
+ } catch (Exception e) {
+ return new GenericResponse<Server>(new Status(e), null);
+ }
+ return new GenericResponse<Server>(Status.STATUS_SUCCESS, server);
}
-
+
public static void main(String[] args) {
StringListResponse listResponse = (StringListResponse)new DiscoveredServersResource().getDiscoveredServers(false);
for (String server : listResponse.getData()) {
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 3092e80d..71c0f7db 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
@@ -32,92 +32,92 @@ import javax.ws.rs.core.MediaType;
import org.springframework.stereotype.Component;
+import com.gluster.storage.management.core.constants.CoreConstants;
import com.gluster.storage.management.core.constants.RESTConstants;
import com.gluster.storage.management.core.model.GlusterServer;
import com.gluster.storage.management.core.model.GlusterServer.SERVER_STATUS;
-import com.gluster.storage.management.core.model.Server;
import com.gluster.storage.management.core.model.Status;
import com.gluster.storage.management.core.response.GlusterServerListResponse;
import com.gluster.storage.management.core.response.GlusterServerResponse;
import com.gluster.storage.management.server.utils.GlusterUtil;
import com.gluster.storage.management.server.utils.SshUtil;
-import com.sun.jersey.api.core.InjectParam;
import com.sun.jersey.spi.resource.Singleton;
@Component
@Singleton
@Path("/cluster/servers")
public class GlusterServersResource extends AbstractServersResource {
- @InjectParam
- private GlusterUtil glusterUtil;
-
- public static final String HOSTNAMETAG = "hostname:";
-
- public void setGlusterUtil(GlusterUtil glusterUtil) {
- this.glusterUtil = glusterUtil;
- }
- public GlusterUtil getGlusterUtil() {
- return glusterUtil;
- }
+ public static final String HOSTNAMETAG = "hostname:";
- private List<GlusterServer> getServerDetails(String knownServer) {
- List<GlusterServer> glusterServers = glusterUtil.getGlusterServers(knownServer);
+ private GlusterServerListResponse getServerDetails(String knownServer) {
+ List<GlusterServer> glusterServers = getGlusterUtil().getGlusterServers(knownServer);
+ int errCount = 0;
+ StringBuilder errMsg = new StringBuilder("Couldn't fetch details for server(s): ");
+
for (GlusterServer server : glusterServers) {
if (server.getStatus() == SERVER_STATUS.ONLINE) {
+ try {
fetchServerDetails(server);
+ } catch (Exception e) {
+ errMsg.append(CoreConstants.NEWLINE + server.getName() + " : [" + e.getMessage() + "]");
+ errCount++;
+ }
}
}
- return glusterServers;
+ Status status;
+ if (errCount==0) {
+ status = new Status(Status.STATUS_CODE_SUCCESS, "Success");
+ } else if(errCount == glusterServers.size()) {
+ status = new Status(Status.STATUS_CODE_FAILURE, errMsg.toString());
+ } else {
+ status = new Status(Status.STATUS_CODE_PART_SUCCESS, errMsg.toString());
+ }
+ return new GlusterServerListResponse(status, glusterServers);
}
@GET
@Produces(MediaType.TEXT_XML)
- public GlusterServerListResponse getGlusterServers(@QueryParam(RESTConstants.QUERY_PARAM_KNOWN_SERVER) String knownServer) {
- return new GlusterServerListResponse(Status.STATUS_SUCCESS, getServerDetails(knownServer));
+ public GlusterServerListResponse getGlusterServers(
+ @QueryParam(RESTConstants.QUERY_PARAM_KNOWN_SERVER) String knownServer) {
+ return getServerDetails(knownServer);
}
@GET
@Path("{serverName}")
@Produces(MediaType.TEXT_XML)
- public GlusterServer getGlusterServer(@PathParam("serverName") String serverName) {
- // TODO: Implement logic to fetch details of a single gluster server (peer)
- GlusterServer server = new GlusterServer(serverName);
- fetchServerDetails(server);
- server.setStatus(SERVER_STATUS.ONLINE);
- return server;
- }
-
- /*
- * (non-Javadoc)
- *
- * @see
- * com.gluster.storage.management.server.resources.AbstractServersResource#fetchServerDetails(com.gluster.storage
- * .management.core.model.Server)
- */
- @Override
- protected void fetchServerDetails(Server server) {
- // fetch standard server details like cpu, disk, memory details
- super.fetchServerDetails(server);
-
- // TODO: Fetch gluster server details like status
+ public GlusterServerResponse getGlusterServer(
+ @QueryParam(RESTConstants.QUERY_PARAM_KNOWN_SERVER) String knownServer,
+ @PathParam("serverName") String serverName) {
+ GlusterServer server = getGlusterUtil().getGlusterServer(knownServer, serverName);
+ Status status = Status.STATUS_SUCCESS;
+ if(server.isOnline()) {
+ try {
+ fetchServerDetails(server);
+ } catch (Exception e) {
+ status.setCode(Status.STATUS_CODE_FAILURE);
+ }
+ }
+ return new GlusterServerResponse(status, server);
}
@POST
@Produces(MediaType.TEXT_XML)
- public GlusterServerResponse addServer(@FormParam("serverName") String serverName, @FormParam("existingServer") String existingServer) {
- Status status = glusterUtil.addServer(serverName, existingServer);
+ public GlusterServerResponse addServer(@FormParam("serverName") String serverName,
+ @FormParam("existingServer") String existingServer) {
+ Status status = getGlusterUtil().addServer(serverName, existingServer);
if (!status.isSuccess()) {
return new GlusterServerResponse(status, null);
}
- return new GlusterServerResponse(Status.STATUS_SUCCESS, getGlusterServer(serverName));
+ return new GlusterServerResponse(Status.STATUS_SUCCESS, getGlusterServer(existingServer, serverName)
+ .getGlusterServer());
}
-
+
@DELETE
@Produces(MediaType.TEXT_XML)
public Status removeServer(@QueryParam("serverName") String serverName) {
- return glusterUtil.removeServer(serverName);
+ return getGlusterUtil().removeServer(serverName);
}
public static void main(String[] args) {
@@ -125,10 +125,10 @@ public class GlusterServersResource extends AbstractServersResource {
GlusterUtil glusterUtil = new GlusterUtil();
glusterUtil.setSshUtil(new SshUtil());
glusterServersResource.setGlusterUtil(glusterUtil);
- System.out.println(glusterServersResource.getServerDetails("127.0.0.1").size());
+ // System.out.println(glusterServersResource.getServerDetails("127.0.0.1").size());
// To add a server
-// GlusterServerResponse response = glusterServersResource.addServer("my-server");
-// System.out.println(response.getData().getName());
+ // GlusterServerResponse response = glusterServersResource.addServer("my-server");
+ // System.out.println(response.getData().getName());
}
}
diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/GlusterUtil.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/GlusterUtil.java
index 91f809b8..a7ce9bc5 100644
--- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/GlusterUtil.java
+++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/GlusterUtil.java
@@ -92,6 +92,25 @@ public class GlusterUtil {
return null;
}
+ private GlusterServer getKnownServer(String knownServer) {
+ GlusterServer server = new GlusterServer(knownServer);
+ server.setStatus(SERVER_STATUS.ONLINE); //TODO: If pingable
+ //NOTE: No UUID assumed, it can be fetch while getting server details
+ return server;
+ }
+
+
+ public GlusterServer getGlusterServer(String knownServer, String serverName) {
+ List<GlusterServer> servers = getGlusterServers(knownServer);
+ for(GlusterServer server : servers) {
+ if(server.getName().equals(serverName)) {
+ return server;
+ }
+ }
+ return null;
+ }
+
+
public List<GlusterServer> getGlusterServers(String knownServer) {
String output = getPeerStatus(knownServer);
if (output == null) {
@@ -99,6 +118,7 @@ public class GlusterUtil {
}
List<GlusterServer> glusterServers = new ArrayList<GlusterServer>();
+ glusterServers.add(getKnownServer(knownServer)); // Append the known server
GlusterServer server = null;
boolean foundHost = false;
boolean foundUuid = false;
diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/ServerUtil.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/ServerUtil.java
index 20f5252d..5b953c3d 100644
--- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/ServerUtil.java
+++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/ServerUtil.java
@@ -50,6 +50,9 @@ public class ServerUtil {
@Autowired
ServletContext servletContext;
+ @Autowired
+ private SshUtil sshUtil;
+
private static final String SCRIPT_DIR = "scripts";
private static final String SCRIPT_COMMAND = "python";
private static final String REMOTE_SCRIPT_GET_DISK_FOR_DIR = "get_disk_for_dir.py";
@@ -101,42 +104,53 @@ public class ServerUtil {
}
private String executeOnServer(String serverName, String commandWithArgs) {
- try {
- InetAddress address = InetAddress.getByName(serverName);
- Socket connection = new Socket(address, 50000);
-
- PrintWriter writer = new PrintWriter(connection.getOutputStream(), true);
- writer.println(commandWithArgs);
- writer.println(); // empty line means end of request
-
- InputStream inputStream = connection.getInputStream();
- int available = inputStream.available();
-
- StringBuffer output = new StringBuffer();
- if( available > 0 ) {
- // This happens when PeerAgent sends complete file
- byte[] responseData = new byte[available];
- inputStream.read(responseData);
- output.append(new String(responseData, "UTF-8"));
- } else {
- // This happens in case of normal XML response from PeerAgent
- BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));
-
- String line;
- while (!(line = reader.readLine()).trim().isEmpty()) {
- output.append(line + CoreConstants.NEWLINE);
- }
- }
- connection.close();
-
- return output.toString();
- } catch (Exception e) {
- throw new GlusterRuntimeException("Error during remote execution: [" + e.getMessage() + "]");
+ ProcessResult result = sshUtil.executeRemote(serverName, commandWithArgs);
+ if (!result.isSuccess()) {
+ throw new GlusterRuntimeException("Command [" + commandWithArgs + "] failed on [" + serverName
+ + "] with error [" + result.getExitValue() + "][" + result.getOutput() + "]");
}
+ return result.getOutput();
}
-
+
+ // This is the old executeOnServer that used socket communication.
+ // We can keep it commented for the time being.
+ // private String executeOnServerUsingSocket(String serverName, String commandWithArgs) {
+ // try {
+ // InetAddress address = InetAddress.getByName(serverName);
+ // Socket connection = new Socket(address, 50000);
+ //
+ // PrintWriter writer = new PrintWriter(connection.getOutputStream(), true);
+ // writer.println(commandWithArgs);
+ // writer.println(); // empty line means end of request
+ //
+ // InputStream inputStream = connection.getInputStream();
+ // int available = inputStream.available();
+ //
+ // StringBuffer output = new StringBuffer();
+ // if( available > 0 ) {
+ // // This happens when PeerAgent sends complete file
+ // byte[] responseData = new byte[available];
+ // inputStream.read(responseData);
+ // output.append(new String(responseData, "UTF-8"));
+ // } else {
+ // // This happens in case of normal XML response from PeerAgent
+ // BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));
+ //
+ // String line;
+ // while (!(line = reader.readLine()).trim().isEmpty()) {
+ // output.append(line + CoreConstants.NEWLINE);
+ // }
+ // }
+ // connection.close();
+ //
+ // return output.toString();
+ // } catch (Exception e) {
+ // throw new GlusterRuntimeException("Error during remote execution: [" + e.getMessage() + "]");
+ // }
+ // }
+
public String getFileFromServer(String serverName, String fileName) {
- return executeOnServer(serverName, "get_file " + fileName);
+ return executeOnServer(serverName, "get_file " + fileName);
}
/**
@@ -160,27 +174,30 @@ public class ServerUtil {
Unmarshaller um = context.createUnmarshaller();
return um.unmarshal(new ByteArrayInputStream(input.getBytes()));
} catch (JAXBException e) {
- if(tryGenericResponseOnFailure) {
+ if (tryGenericResponseOnFailure) {
// unmarshalling failed. try to unmarshal a GenericResponse object
return unmarshal(GenericResponse.class, input, false);
}
-
+
return new Status(Status.STATUS_CODE_FAILURE, "Error during unmarshalling string [" + input
+ "] for class [" + expectedClass.getName() + ": [" + e.getMessage() + "]");
}
}
- public static void main(String args[]) throws Exception {
- // CreateVolumeExportDirectory.py md0 testvol
- System.out.println(new ServerUtil().getFileFromServer("localhost", "/tmp/python/PeerAgent.py"));
- }
-
/**
- * @param serverName Server on which the directory is present
- * @param brickDir Directory whose disk is to be fetched
+ * @param serverName
+ * Server on which the directory is present
+ * @param brickDir
+ * Directory whose disk is to be fetched
* @return Status object containing the disk name, or error message in case the remote script fails.
*/
public Status getDiskForDir(String serverName, String brickDir) {
return (Status) executeOnServer(true, serverName, REMOTE_SCRIPT_GET_DISK_FOR_DIR + " " + brickDir, Status.class);
}
+
+ public static void main(String args[]) throws Exception {
+ // CreateVolumeExportDirectory.py md0 testvol
+ System.out.println(new ServerUtil().getFileFromServer("localhost", "/tmp/python/PeerAgent.py"));
+ }
+
}