diff options
| author | selvam <selvam@selvam-Studio-XPS-1340.(none)> | 2011-05-24 20:03:21 +0530 | 
|---|---|---|
| committer | selvam <selvam@selvam-Studio-XPS-1340.(none)> | 2011-05-24 20:03:21 +0530 | 
| commit | 7b78baadb7dd100940a4d6ddb5ca33826a3a5ce1 (patch) | |
| tree | c351ecdcdc4fe22c51d6186d921a6f95889e0985 /src | |
| parent | b321add074a8b8413f9285bac7458a1d4ceea60c (diff) | |
Story:#15 task:#81 Intergrate interface changes in the server, model and UI
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);   	}  | 
