diff options
Diffstat (limited to 'src')
16 files changed, 275 insertions, 212 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..3c3ef401 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 @@ -45,19 +45,17 @@ 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 ((Response) fetchResource(queryParams, responseClass)).getData(); + return responseClass.cast(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") @@ -71,10 +69,10 @@ public class DiscoveredServersClient extends AbstractClient { 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); + 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 e639f615..3ef5f87f 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; @@ -29,21 +28,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; @@ -80,42 +78,9 @@ public class GlusterDataModelManager { 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", 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); @@ -123,8 +88,6 @@ public class GlusterDataModelManager { initializeAutoDiscoveredServers(cluster); initializeDisks(); - // addDisksToVolumes(); - // addVolumeOptions(); createDummyLogMessages(); @@ -135,6 +98,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(serverName, 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()) { @@ -143,6 +131,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 }) { @@ -162,14 +163,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", 100d, 80d, DISK_STATUS.READY); @@ -181,7 +174,7 @@ public class GlusterDataModelManager { s2dd = new Disk(server2, "sdd", 200d, 124.89, DISK_STATUS.READY); // disk name unavailable since server is offline - s3da = new Disk(server3, "NA", -1d, -1d, DISK_STATUS.OFFLINE); + s3da = new Disk(server3, "NA", -1d, -1d, DISK_STATUS.IO_ERROR); s4da = new Disk(server4, "sda", 100d, 85.39, DISK_STATUS.READY); @@ -227,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++) { @@ -250,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..6d164993 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,12 @@ public class GlusterServersClient extends AbstractClient { return RESOURCE_NAME; } - public List<GlusterServer> getServers(String knownServer) { + // 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") @@ -78,7 +79,7 @@ public class GlusterServersClient extends AbstractClient { if (usersClient.authenticate("gluster", "gluster").isSuccess()) { GlusterServersClient serverResource = new GlusterServersClient(usersClient.getSecurityToken()); - List<GlusterServer> glusterServers = serverResource.getServers("127.0.0.1"); + List<GlusterServer> glusterServers = serverResource.getServers("127.0.0.1").getData(); for (GlusterServer server : glusterServers) { System.out.println(server.getName()); } 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 9924d596..9acd3d71 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 @@ -26,10 +26,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 Double space; @@ -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 09137014..af90b574 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,7 +147,7 @@ public class GlusterDummyModel { s2dc = new Disk(server2, "sdc", 200d, -1d, DISK_STATUS.UNINITIALIZED); s2dd = new Disk(server2, "sdd", 200d, 124.89, DISK_STATUS.READY); - s3da = new Disk(server3, "NA", -1d, -1d, DISK_STATUS.OFFLINE); // disk name unavailable since server is offline + s3da = new Disk(server3, "NA", -1d, -1d, DISK_STATUS.IO_ERROR); // disk name unavailable since server is offline s4da = new Disk(server4, "sda", 100d, 85.39, DISK_STATUS.READY); @@ -245,29 +244,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); @@ -290,7 +289,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..c7748f9c 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() { 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 92553797..520bc3e7 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..760d8346 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,12 @@ 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.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.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 004160a7..0c91a02b 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 @@ -21,8 +21,8 @@ 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.model.Server; +import com.gluster.storage.management.core.response.GenericResponse; /** * Abstract resource class for servers. Abstracts basic server related functionality like "get server details". @@ -38,14 +38,15 @@ public class AbstractServersResource { * @param server * 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); - } + + +// public Server getServerDetails(String serverName) { +// +// } + + + /** * @param server */ @@ -55,15 +56,15 @@ public class AbstractServersResource { server.setTotalMemory(Math.ceil(Math.random() * 8)); server.setMemoryInUse(Math.random() * server.getTotalMemory()); addDummyDisks(server); - addDummyNetworkInterfaces(server, (int) Math.ceil(Math.random() * 4)); + //addDummyNetworkInterfaces(server, (int) Math.ceil(Math.random() * 4)); } - 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")); - } - } +// 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")); +// } +// } /** * @param server 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..189e75f9 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 @@ -33,8 +33,11 @@ import org.springframework.stereotype.Component; 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,6 +45,9 @@ import com.sun.jersey.spi.resource.Singleton; @Path("/discoveredservers") public class DiscoveredServersResource extends AbstractServersResource { private List<String> discoveredServerNames = new ArrayList<String>(); + + @InjectParam + private static ServerUtil serverUtil; public List<String> getDiscoveredServerNames() { return discoveredServerNames; @@ -49,22 +55,27 @@ public class DiscoveredServersResource extends AbstractServersResource { @GET @Produces(MediaType.TEXT_XML) - public Response getDiscoveredServers(@QueryParam("details") Boolean getDetails) { + public Object 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> discoveredServer; for (String serverName : serverNames) { - discoveredServers.add(getDiscoveredServer(serverName)); + discoveredServer = getDiscoveredServer(serverName); + if (!discoveredServer.getStatus().isSuccess()) { + return new ServerListResponse(discoveredServer.getStatus(), discoveredServers); + } + discoveredServers.add(discoveredServer.getData()); } - return discoveredServers; + return new ServerListResponse(Status.STATUS_SUCCESS, discoveredServers); } - + public void setDiscoveredServerNames(List<String> discoveredServerNames) { synchronized (discoveredServerNames) { this.discoveredServerNames = discoveredServerNames; @@ -74,11 +85,21 @@ 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; + return fetchServerDetails(server); + } + + protected GenericResponse<Server> fetchServerDetails(Server server) { + // 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) { + return new GenericResponse<Server>((Status)response, server); + } + server.copyFrom((Server) response); // Update the details in <Server> object + return new GenericResponse<Server>( Status.STATUS_SUCCESS, (Server) response); } + public static void main(String[] args) { StringListResponse listResponse = (StringListResponse)new DiscoveredServersResource().getDiscoveredServers(false); 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..d01b4d3d 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 @@ -37,9 +37,14 @@ 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.GenericResponse; import com.gluster.storage.management.core.response.GlusterServerListResponse; import com.gluster.storage.management.core.response.GlusterServerResponse; +import com.gluster.storage.management.core.utils.ProcessResult; +import com.gluster.storage.management.core.utils.ProcessUtil; +import com.gluster.storage.management.server.filters.GlusterResourceFilterFactory; import com.gluster.storage.management.server.utils.GlusterUtil; +import com.gluster.storage.management.server.utils.ServerUtil; import com.gluster.storage.management.server.utils.SshUtil; import com.sun.jersey.api.core.InjectParam; import com.sun.jersey.spi.resource.Singleton; @@ -50,7 +55,10 @@ import com.sun.jersey.spi.resource.Singleton; public class GlusterServersResource extends AbstractServersResource { @InjectParam private GlusterUtil glusterUtil; - + + @InjectParam + private static ServerUtil serverUtil; + public static final String HOSTNAMETAG = "hostname:"; public void setGlusterUtil(GlusterUtil glusterUtil) { @@ -61,31 +69,35 @@ public class GlusterServersResource extends AbstractServersResource { return glusterUtil; } - private List<GlusterServer> getServerDetails(String knownServer) { + private GlusterServerListResponse getServerDetails(String knownServer) { List<GlusterServer> glusterServers = glusterUtil.getGlusterServers(knownServer); + GenericResponse<Server> serverResponse; for (GlusterServer server : glusterServers) { if (server.getStatus() == SERVER_STATUS.ONLINE) { - fetchServerDetails(server); + serverResponse = fetchServerDetails(server); + if (!serverResponse.getStatus().isSuccess()) { + return new GlusterServerListResponse(serverResponse.getStatus(), glusterServers); + } } } - return glusterServers; + return new GlusterServerListResponse(Status.STATUS_SUCCESS, 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) { + public GlusterServerResponse 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; + GenericResponse<Server> serverResponse = fetchServerDetails(server); + return new GlusterServerResponse(serverResponse.getStatus(), (GlusterServer) serverResponse.getData()); } /* @@ -95,25 +107,28 @@ public class GlusterServersResource extends AbstractServersResource { * com.gluster.storage.management.server.resources.AbstractServersResource#fetchServerDetails(com.gluster.storage * .management.core.model.Server) */ - @Override - protected void fetchServerDetails(Server server) { + protected GenericResponse<Server> fetchServerDetails(Server server) { // fetch standard server details like cpu, disk, memory details - super.fetchServerDetails(server); - - // TODO: Fetch gluster server details like status + Object response = serverUtil.executeOnServer(true, server.getName(), "get_server_details.py", Server.class); + if (response instanceof Status) { + return new GenericResponse<Server>((Status) response, server); + } + server.copyFrom((Server) response); // Update the details in <Server> object + return new GenericResponse<Server>(Status.STATUS_SUCCESS, (Server) response); } @POST @Produces(MediaType.TEXT_XML) - public GlusterServerResponse addServer(@FormParam("serverName") String serverName, @FormParam("existingServer") String existingServer) { + public GlusterServerResponse addServer(@FormParam("serverName") String serverName, + @FormParam("existingServer") String existingServer) { Status status = glusterUtil.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(serverName).getGlusterServer()); } - + @DELETE @Produces(MediaType.TEXT_XML) public Status removeServer(@QueryParam("serverName") String serverName) { @@ -125,10 +140,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/ServerUtil.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/ServerUtil.java index 20f5252d..23a8169d 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 @@ -49,6 +49,9 @@ import com.gluster.storage.management.core.utils.ProcessUtil; public class ServerUtil { @Autowired ServletContext servletContext; + + @Autowired + private SshUtil sshUtil; private static final String SCRIPT_DIR = "scripts"; private static final String SCRIPT_COMMAND = "python"; @@ -84,7 +87,7 @@ public class ServerUtil { Class expectedClass) { try { String output = executeOnServer(serverName, commandWithArgs); - +System.out.println(output); // In case the script execution exits ungracefully, the agent would return a GenericResponse. // hence pass last argument as true to try GenericResponse unmarshalling in such cases. Object response = unmarshal(expectedClass, output, expectedClass != GenericResponse.class); @@ -101,40 +104,51 @@ 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); } |
