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-25 17:41:01 +0530 | 
| commit | f3e001d3f468c466e04f7e0580f5ee225916a47f (patch) | |
| tree | d2800b3a188765b864697879e74300ec7d69fa9b /src | |
| parent | a34859e239778485565d57f8ddd33c97653af968 (diff) | |
Story:#15 task:#81 Intergrate interface changes in the server, model and UI
Diffstat (limited to 'src')
12 files changed, 162 insertions, 164 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 3c3ef401..a1dad796 100644 --- a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/DiscoveredServersClient.java +++ b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/DiscoveredServersClient.java @@ -18,11 +18,8 @@   *******************************************************************************/  package com.gluster.storage.management.client; -import java.util.List; -  import javax.ws.rs.core.MultivaluedMap; -import com.gluster.storage.management.core.model.Response;  import com.gluster.storage.management.core.model.Server;  import com.gluster.storage.management.core.response.GenericResponse;  import com.gluster.storage.management.core.response.ServerListResponse; @@ -32,7 +29,7 @@ import com.sun.jersey.core.util.MultivaluedMapImpl;  public class DiscoveredServersClient extends AbstractClient {  	private static final String RESOURCE_NAME = "discoveredservers"; -	public DiscoveredServersClient(String serverName, String securityToken) { +	public DiscoveredServersClient(String securityToken) {  		super(securityToken);  	} @@ -45,8 +42,7 @@ public class DiscoveredServersClient extends AbstractClient {  	private Object getDiscoveredServers(Boolean getDetails, Class responseClass) {  		MultivaluedMap<String, String> queryParams = new MultivaluedMapImpl();  		queryParams.putSingle("details", getDetails.toString()); -		// return ((Response) fetchResource(queryParams, responseClass)).getData(); -		return responseClass.cast(fetchResource(queryParams, responseClass)); +		return fetchResource(queryParams, responseClass);  	}  	public StringListResponse getDiscoveredServerNames() { @@ -67,8 +63,7 @@ public class DiscoveredServersClient extends AbstractClient {  	public static void main(String[] args) {  		UsersClient usersClient = new UsersClient();  		if (usersClient.authenticate("gluster", "gluster").isSuccess()) { -			DiscoveredServersClient serverResource = new DiscoveredServersClient("localhost", -					usersClient.getSecurityToken()); +			DiscoveredServersClient serverResource = new DiscoveredServersClient(usersClient.getSecurityToken());  			StringListResponse discoveredServerNames = serverResource.getDiscoveredServerNames();  			System.out.println(discoveredServerNames.getData());  			ServerListResponse discoveredServers = serverResource.getDiscoveredServerDetails(); 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 3ef5f87f..1319cec5 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 @@ -55,7 +55,6 @@ public class GlusterDataModelManager {  	private static GlusterDataModelManager instance = new GlusterDataModelManager();  	private GlusterDataModel model;  	private String securityToken; -	private String serverName;  	private List<ClusterListener> listeners = new ArrayList<ClusterListener>();  	private List<VolumeOptionInfo> volumeOptionsDefaults; @@ -107,7 +106,7 @@ public class GlusterDataModelManager {  	}  	private void initializeAutoDiscoveredServers(Cluster cluster) { -		ServerListResponse discoveredServerListResponse = new DiscoveredServersClient(serverName, securityToken).getDiscoveredServerDetails(); +		ServerListResponse discoveredServerListResponse = new DiscoveredServersClient(securityToken).getDiscoveredServerDetails();  		if (!discoveredServerListResponse.getStatus().isSuccess()) {  			throw new GlusterRuntimeException(discoveredServerListResponse.getStatus().getMessage());  		} 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 6d164993..8368ceea 100644 --- a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterServersClient.java +++ b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterServersClient.java @@ -44,7 +44,6 @@ public class GlusterServersClient extends AbstractClient {  		return RESOURCE_NAME;  	} -	// public List<GlusterServer> getServers(String knownServer) {  	public GlusterServerListResponse getServers(String knownServer) {  		MultivaluedMap<String, String> queryParams = new MultivaluedMapImpl();  		queryParams.add(RESTConstants.QUERY_PARAM_KNOWN_SERVER, knownServer); @@ -78,8 +77,8 @@ public class GlusterServersClient extends AbstractClient {  		UsersClient usersClient = new UsersClient();  		if (usersClient.authenticate("gluster", "gluster").isSuccess()) { -			GlusterServersClient serverResource = new GlusterServersClient(usersClient.getSecurityToken()); -			List<GlusterServer> glusterServers = serverResource.getServers("127.0.0.1").getData(); +			GlusterServersClient glusterServersClient = new GlusterServersClient(usersClient.getSecurityToken()); +			List<GlusterServer> glusterServers = glusterServersClient.getServers("127.0.0.1").getData();  			for (GlusterServer server : glusterServers) {  				System.out.println(server.getName());  			} @@ -87,7 +86,7 @@ public class GlusterServersClient extends AbstractClient {  			// Add server  			 Server srv = new Server();  			 srv.setName("server3"); -			 GlusterServerResponse response = serverResource.addServer(srv); +			 GlusterServerResponse response = glusterServersClient.addServer(srv);  			 System.out.println(response.getGlusterServer().getName());  			 System.out.println(response.getStatus().isSuccess()); diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/GlusterServer.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/GlusterServer.java index c7748f9c..a9455f48 100644 --- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/GlusterServer.java +++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/GlusterServer.java @@ -53,6 +53,10 @@ public class GlusterServer extends Server {  		this(name, parent, status, numOfCPUs, cpuUsage, totalMemory, memoryInUse);  		setCluster(cluster);  	} +	 +	public Boolean isOnline() { +		return getStatus() == SERVER_STATUS.ONLINE; +	}  	public String getStatusStr() {  		return STATUS_STR[getStatus().ordinal()]; diff --git a/src/com.gluster.storage.management.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 760d8346..78f703ea 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/NetworkInterfaceTableLabelProvider.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/NetworkInterfaceTableLabelProvider.java @@ -32,10 +32,11 @@ public class NetworkInterfaceTableLabelProvider extends TableLabelProviderAdapte  		NetworkInterface networkInterface = (NetworkInterface) element;  		String columnText = (columnIndex == NETWORK_INTERFACE_TABLE_COLUMN_INDICES.INTERFACE.ordinal() ? networkInterface.getName()  +			: columnIndex == NETWORK_INTERFACE_TABLE_COLUMN_INDICES.MODEL.ordinal() ? networkInterface.getModel() +			: columnIndex == NETWORK_INTERFACE_TABLE_COLUMN_INDICES.SPEED.ordinal() ? networkInterface.getSpeed()  			: columnIndex == NETWORK_INTERFACE_TABLE_COLUMN_INDICES.IP_ADDRESS.ordinal() ? networkInterface.getIpAddress()  			: columnIndex == NETWORK_INTERFACE_TABLE_COLUMN_INDICES.NETMASK.ordinal() ? networkInterface.getNetMask()  			: columnIndex == NETWORK_INTERFACE_TABLE_COLUMN_INDICES.GATEWAY.ordinal() ? networkInterface.getDefaultGateway() -			// : columnIndex == NETWORK_INTERFACE_TABLE_COLUMN_INDICES.PREFERRED.ordinal() ? (networkInterface.isPreferred() ? "Yes" : "No")  			: "Invalid");  		return ((columnText == null || columnText.trim().equals("")) ? CoreConstants.NA : columnText);  	} diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/GlusterServerSummaryView.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/GlusterServerSummaryView.java index d43cab15..8d3217f1 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/GlusterServerSummaryView.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/GlusterServerSummaryView.java @@ -57,11 +57,11 @@ public class GlusterServerSummaryView extends ViewPart {  	private GlusterServer server;  	public enum NETWORK_INTERFACE_TABLE_COLUMN_INDICES { -		INTERFACE, IP_ADDRESS, NETMASK, GATEWAY +		INTERFACE, MODEL, SPEED, IP_ADDRESS, NETMASK, GATEWAY  	}; -	private static final String[] NETWORK_INTERFACE_TABLE_COLUMN_NAMES = { "Interface", "IP Address", "Netmask", -			"Gateway" }; +	private static final String[] NETWORK_INTERFACE_TABLE_COLUMN_NAMES = { "Interface", "Model", "Speed", "IP Address", +			"Netmask", "Gateway" };  	@Override  	public void createPartControl(Composite parent) { @@ -206,10 +206,11 @@ public class GlusterServerSummaryView extends ViewPart {  		parent.setLayout(tableColumnLayout);  		setColumnProperties(table, NETWORK_INTERFACE_TABLE_COLUMN_INDICES.INTERFACE, SWT.CENTER, 70); +		setColumnProperties(table, NETWORK_INTERFACE_TABLE_COLUMN_INDICES.MODEL, SWT.CENTER, 70); +		setColumnProperties(table, NETWORK_INTERFACE_TABLE_COLUMN_INDICES.SPEED, SWT.CENTER, 70);  		setColumnProperties(table, NETWORK_INTERFACE_TABLE_COLUMN_INDICES.IP_ADDRESS, SWT.CENTER, 100);  		setColumnProperties(table, NETWORK_INTERFACE_TABLE_COLUMN_INDICES.NETMASK, SWT.CENTER, 70);  		setColumnProperties(table, NETWORK_INTERFACE_TABLE_COLUMN_INDICES.GATEWAY, SWT.CENTER, 70); -		// setColumnProperties(table, NETWORK_INTERFACE_TABLE_COLUMN_INDICES.PREFERRED, SWT.CENTER, 70);  	}  	private Composite createTableViewerComposite(Composite parent) { diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/details/tabcreators/GlusterServerTabCreator.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/details/tabcreators/GlusterServerTabCreator.java index e1aa59ff..00318373 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/details/tabcreators/GlusterServerTabCreator.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/details/tabcreators/GlusterServerTabCreator.java @@ -58,18 +58,18 @@ import com.richclientgui.toolbox.gauges.CoolGauge;  public class GlusterServerTabCreator implements TabCreator {  	public enum NETWORK_INTERFACE_TABLE_COLUMN_INDICES { -		INTERFACE, IP_ADDRESS, NETMASK, GATEWAY +		INTERFACE, MODEL, SPEED, IP_ADDRESS, NETMASK, GATEWAY  	}; -	private static final String[] NETWORK_INTERFACE_TABLE_COLUMN_NAMES = { "Interface", "IP Address", "Netmask", -			"Gateway" }; +	private static final String[] NETWORK_INTERFACE_TABLE_COLUMN_NAMES = { "Interface", "Model", "Speed", "IP Address", +			"Netmask", "Gateway" };  	private static final GUIHelper guiHelper = GUIHelper.getInstance();  	private void createServerSummarySection(GlusterServer server, FormToolkit toolkit, final ScrolledForm form) {  		Composite section = guiHelper.createSection(form, toolkit, "Summary", null, 2, false); -//		toolkit.createLabel(section, "Preferred Network: ", SWT.NONE); -//		toolkit.createLabel(section, server.getPreferredNetworkInterface().getName(), SWT.NONE); +		// toolkit.createLabel(section, "Preferred Network: ", SWT.NONE); +		// toolkit.createLabel(section, server.getPreferredNetworkInterface().getName(), SWT.NONE);  		boolean online = server.getStatus() == SERVER_STATUS.ONLINE; @@ -168,6 +168,8 @@ public class GlusterServerTabCreator implements TabCreator {  		parent.setLayout(tableColumnLayout);  		setColumnProperties(table, NETWORK_INTERFACE_TABLE_COLUMN_INDICES.INTERFACE, SWT.CENTER, 70); +		setColumnProperties(table, NETWORK_INTERFACE_TABLE_COLUMN_INDICES.MODEL, SWT.CENTER, 70); +		setColumnProperties(table, NETWORK_INTERFACE_TABLE_COLUMN_INDICES.SPEED, SWT.CENTER, 70);  		setColumnProperties(table, NETWORK_INTERFACE_TABLE_COLUMN_INDICES.IP_ADDRESS, SWT.CENTER, 100);  		setColumnProperties(table, NETWORK_INTERFACE_TABLE_COLUMN_INDICES.NETMASK, SWT.CENTER, 70);  		setColumnProperties(table, NETWORK_INTERFACE_TABLE_COLUMN_INDICES.GATEWAY, SWT.CENTER, 70); @@ -217,19 +219,20 @@ public class GlusterServerTabCreator implements TabCreator {  	private Composite createNetworkInterfacesSection(GlusterServer server, FormToolkit toolkit, ScrolledForm form) {  		final Composite section = guiHelper.createSection(form, toolkit, "Network Interfaces", null, 1, false);  		createNetworkInterfacesTableViewer(createTableViewerComposite(section), server); -//		Hyperlink changePreferredNetworkLink = toolkit.createHyperlink(section, "Change Preferred Network", SWT.NONE); -//		changePreferredNetworkLink.addHyperlinkListener(new HyperlinkAdapter() { -// -//			@Override -//			public void linkActivated(HyperlinkEvent e) { -//				new MessageDialog( -//						section.getShell(), -//						"Gluster Storage Platform", -//						guiHelper.getImage(IImageKeys.SERVER), -//						"This will show additional controls to help user choose a new network interface. TO BE IMPLEMENTED.", -//						MessageDialog.INFORMATION, new String[] { "OK" }, 0).open(); -//			} -//		}); +		// Hyperlink changePreferredNetworkLink = toolkit.createHyperlink(section, "Change Preferred Network", +		// SWT.NONE); +		// changePreferredNetworkLink.addHyperlinkListener(new HyperlinkAdapter() { +		// +		// @Override +		// public void linkActivated(HyperlinkEvent e) { +		// new MessageDialog( +		// section.getShell(), +		// "Gluster Storage Platform", +		// guiHelper.getImage(IImageKeys.SERVER), +		// "This will show additional controls to help user choose a new network interface. TO BE IMPLEMENTED.", +		// MessageDialog.INFORMATION, new String[] { "OK" }, 0).open(); +		// } +		// });  		return section;  	} @@ -241,7 +244,8 @@ public class GlusterServerTabCreator implements TabCreator {  		serverLogsTab.layout(); // IMP: lays out the form properly  	} -	private void createServerDisksTab(GlusterServer server, TabFolder tabFolder, FormToolkit toolkit, IWorkbenchSite site) { +	private void createServerDisksTab(GlusterServer server, TabFolder tabFolder, FormToolkit toolkit, +			IWorkbenchSite site) {  		Composite serverDisksTab = guiHelper.createTab(tabFolder, "Disks", IImageKeys.SERVER);  		ServerDisksPage page = new ServerDisksPage(serverDisksTab, SWT.NONE, site, server.getDisks()); diff --git a/src/com.gluster.storage.management.server/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 0c91a02b..8c7f54ae 100644 --- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/AbstractServersResource.java +++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/AbstractServersResource.java @@ -20,17 +20,22 @@   */  package com.gluster.storage.management.server.resources; -import com.gluster.storage.management.core.model.Disk; +import com.gluster.storage.management.core.exceptions.GlusterRuntimeException;  import com.gluster.storage.management.core.model.Server; -import com.gluster.storage.management.core.response.GenericResponse; +import com.gluster.storage.management.core.model.Status; +import com.gluster.storage.management.server.utils.GlusterUtil; +import com.gluster.storage.management.server.utils.ServerUtil; +import com.sun.jersey.api.core.InjectParam;  /**   * Abstract resource class for servers. Abstracts basic server related functionality like "get server details".   */  public class AbstractServersResource { -	// TODO: Used for generating dummy ip address. To be removed after implementing actual logic for fetching server -	// details -	private static int ipCount = 1; +	@InjectParam +	private ServerUtil serverUtil; +	 +	@InjectParam +	private GlusterUtil glusterUtil;  	/**  	 * Fetch details of the given server. The server name must be populated in the object before calling this method. @@ -38,43 +43,20 @@ public class AbstractServersResource {  	 * @param server  	 *            Server whose details are to be fetched  	 */ -	 -	 - -//	public Server getServerDetails(String serverName) { -//		 -//	} -	 -	 -	 -	/** -	 * @param server -	 */ -	private void populateDummyData(Server server) { -		server.setNumOfCPUs((int) (Math.ceil(Math.random() * 8))); -		server.setCpuUsage(Math.random() * 100); -		server.setTotalMemory(Math.ceil(Math.random() * 8)); -		server.setMemoryInUse(Math.random() * server.getTotalMemory()); -		addDummyDisks(server); -		//addDummyNetworkInterfaces(server, (int) Math.ceil(Math.random() * 4)); +	protected void 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) { +			throw new GlusterRuntimeException(((Status)response).getMessage()); +		} +		server.copyFrom((Server) response); // Update the details in <Server> object  	} -//	private void addDummyNetworkInterfaces(Server server, int interfaceCount) { -//		for (int i = 0; i < interfaceCount; i++) { -//			server.addNetworkInterface(new NetworkInterface("eth" + i, server, "192.168.1." + ipCount++, -//					"255.255.255.0", "192.168.1.1")); -//		} -//	} +	protected void setGlusterUtil(GlusterUtil glusterUtil) { +		this.glusterUtil = glusterUtil; +	} -	/** -	 * @param server -	 */ -	private void addDummyDisks(Server server) { -		double dummyDiskSpace = Math.random() * 500; -		server.addDisk(new Disk(server, "sda", dummyDiskSpace, Math.random() * dummyDiskSpace, Disk.DISK_STATUS.READY)); -		dummyDiskSpace = Math.random() * 500; -		server.addDisk(new Disk(server, "sdb", dummyDiskSpace, Math.random() * dummyDiskSpace, Disk.DISK_STATUS.READY)); -		dummyDiskSpace = Math.random() * 500; -		server.addDisk(new Disk(server, "sdc", dummyDiskSpace, Math.random() * dummyDiskSpace, Disk.DISK_STATUS.READY)); +	protected GlusterUtil getGlusterUtil() { +		return glusterUtil;  	}  } diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/DiscoveredServersResource.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/DiscoveredServersResource.java index 189e75f9..eba06bf5 100644 --- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/DiscoveredServersResource.java +++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/DiscoveredServersResource.java @@ -30,6 +30,7 @@ import javax.ws.rs.core.MediaType;  import org.springframework.stereotype.Component; +import com.gluster.storage.management.core.constants.CoreConstants;  import com.gluster.storage.management.core.model.Response;  import com.gluster.storage.management.core.model.Server;  import com.gluster.storage.management.core.model.Status; @@ -46,16 +47,15 @@ import com.sun.jersey.spi.resource.Singleton;  public class DiscoveredServersResource extends AbstractServersResource {  	private List<String> discoveredServerNames = new ArrayList<String>(); -	@InjectParam -	private static ServerUtil serverUtil; -  	public List<String> getDiscoveredServerNames() {  		return discoveredServerNames;  	} +	  	@GET  	@Produces(MediaType.TEXT_XML) -	public Object getDiscoveredServers(@QueryParam("details") Boolean getDetails) { +	@SuppressWarnings("rawtypes") +	public Response getDiscoveredServers(@QueryParam("details") Boolean getDetails) {  		if(getDetails != null && getDetails == true) {  			return getDiscoveredServerDetails();  		} @@ -65,15 +65,27 @@ public class DiscoveredServersResource extends AbstractServersResource {  	private ServerListResponse getDiscoveredServerDetails() {  		List<Server> discoveredServers = new ArrayList<Server>();  		List<String> serverNames = getDiscoveredServerNames(); -		GenericResponse<Server> discoveredServer; +		GenericResponse<Server> discoveredServerResponse; +		int errCount = 0; +		StringBuilder errMsg = new StringBuilder("Couldn't fetch details for server(s): ");  		for (String serverName : serverNames) { -			discoveredServer = getDiscoveredServer(serverName); -			if (!discoveredServer.getStatus().isSuccess()) { -				return new ServerListResponse(discoveredServer.getStatus(), discoveredServers); +			discoveredServerResponse = getDiscoveredServer(serverName); +			if (!discoveredServerResponse.getStatus().isSuccess()) { +				errMsg.append(CoreConstants.NEWLINE + serverName + " : " + discoveredServerResponse.getStatus()); +				errCount++; +			} else { +				discoveredServers.add(discoveredServerResponse.getData());  			} -			discoveredServers.add(discoveredServer.getData());  		} -		return new ServerListResponse(Status.STATUS_SUCCESS, discoveredServers); +		Status status = null; +		if(errCount == 0) { +			status = new Status(Status.STATUS_CODE_SUCCESS, "Success"); +		} else if(errCount == serverNames.size()) { +			status = new Status(Status.STATUS_CODE_FAILURE, errMsg.toString()); +		} else { +			status = new Status(Status.STATUS_CODE_PART_SUCCESS, errMsg.toString()); +		} +		return new ServerListResponse(status, discoveredServers);  	}  	public void setDiscoveredServerNames(List<String> discoveredServerNames) { @@ -87,20 +99,14 @@ public class DiscoveredServersResource extends AbstractServersResource {  	@Produces(MediaType.TEXT_XML)  	public GenericResponse<Server> getDiscoveredServer(@PathParam("serverName") String serverName) {  		Server server = new Server(serverName); -		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); +		try { +			fetchServerDetails(server); +		} catch (Exception e) { +			return new GenericResponse<Server>(new Status(e), null);  		} -		server.copyFrom((Server) response); // Update the details in <Server> object -		return new GenericResponse<Server>( Status.STATUS_SUCCESS, (Server) response); +		return new GenericResponse<Server>(Status.STATUS_SUCCESS, server);  	} -  	public static void main(String[] args) {  		StringListResponse listResponse = (StringListResponse)new DiscoveredServersResource().getDiscoveredServers(false);  		for (String server : listResponse.getData()) { diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/GlusterServersResource.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/GlusterServersResource.java index d01b4d3d..71c0f7db 100644 --- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/GlusterServersResource.java +++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/GlusterServersResource.java @@ -32,55 +32,48 @@ import javax.ws.rs.core.MediaType;  import org.springframework.stereotype.Component; +import com.gluster.storage.management.core.constants.CoreConstants;  import com.gluster.storage.management.core.constants.RESTConstants;  import com.gluster.storage.management.core.model.GlusterServer;  import com.gluster.storage.management.core.model.GlusterServer.SERVER_STATUS; -import com.gluster.storage.management.core.model.Server;  import com.gluster.storage.management.core.model.Status; -import com.gluster.storage.management.core.response.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;  @Component  @Singleton  @Path("/cluster/servers")  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) { -		this.glusterUtil = glusterUtil; -	} - -	public GlusterUtil getGlusterUtil() { -		return glusterUtil; -	} -  	private GlusterServerListResponse getServerDetails(String knownServer) { -		List<GlusterServer> glusterServers = glusterUtil.getGlusterServers(knownServer); -		GenericResponse<Server> serverResponse; +		List<GlusterServer> glusterServers = getGlusterUtil().getGlusterServers(knownServer); +		int errCount = 0; +		StringBuilder errMsg = new StringBuilder("Couldn't fetch details for server(s): "); +		  		for (GlusterServer server : glusterServers) {  			if (server.getStatus() == SERVER_STATUS.ONLINE) { -				serverResponse = fetchServerDetails(server); -				if (!serverResponse.getStatus().isSuccess()) { -					return new GlusterServerListResponse(serverResponse.getStatus(), glusterServers); +				try { +				fetchServerDetails(server); +				} catch (Exception e) { +					errMsg.append(CoreConstants.NEWLINE + server.getName() + " : [" + e.getMessage() + "]"); +					errCount++;  				}  			}  		} -		return new GlusterServerListResponse(Status.STATUS_SUCCESS, glusterServers); +		Status status; +		if (errCount==0) { +			status = new Status(Status.STATUS_CODE_SUCCESS, "Success"); +		} else if(errCount == glusterServers.size()) { +			status = new Status(Status.STATUS_CODE_FAILURE, errMsg.toString()); +		} else { +			status = new Status(Status.STATUS_CODE_PART_SUCCESS, errMsg.toString()); +		} +		return new GlusterServerListResponse(status, glusterServers);  	}  	@GET @@ -93,46 +86,38 @@ public class GlusterServersResource extends AbstractServersResource {  	@GET  	@Path("{serverName}")  	@Produces(MediaType.TEXT_XML) -	public GlusterServerResponse getGlusterServer(@PathParam("serverName") String serverName) { -		// TODO: Implement logic to fetch details of a single gluster server (peer) -		GlusterServer server = new GlusterServer(serverName); -		GenericResponse<Server> serverResponse = fetchServerDetails(server); -		return new GlusterServerResponse(serverResponse.getStatus(), (GlusterServer) serverResponse.getData()); -	} - -	/* -	 * (non-Javadoc) -	 *  -	 * @see -	 * com.gluster.storage.management.server.resources.AbstractServersResource#fetchServerDetails(com.gluster.storage -	 * .management.core.model.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); +	public GlusterServerResponse getGlusterServer( +			@QueryParam(RESTConstants.QUERY_PARAM_KNOWN_SERVER) String knownServer, +			@PathParam("serverName") String serverName) { +		GlusterServer server = getGlusterUtil().getGlusterServer(knownServer, serverName); +		Status status = Status.STATUS_SUCCESS; +		if(server.isOnline()) { +			try { +				fetchServerDetails(server); +			} catch (Exception e) { +				status.setCode(Status.STATUS_CODE_FAILURE);  +			}  		} -		server.copyFrom((Server) response); // Update the details in <Server> object -		return new GenericResponse<Server>(Status.STATUS_SUCCESS, (Server) response); +		return new GlusterServerResponse(status, server);  	}  	@POST  	@Produces(MediaType.TEXT_XML)  	public GlusterServerResponse addServer(@FormParam("serverName") String serverName,  			@FormParam("existingServer") String existingServer) { -		Status status = glusterUtil.addServer(serverName, existingServer); +		Status status = getGlusterUtil().addServer(serverName, existingServer);  		if (!status.isSuccess()) {  			return new GlusterServerResponse(status, null);  		} -		return new GlusterServerResponse(Status.STATUS_SUCCESS, getGlusterServer(serverName).getGlusterServer()); +		return new GlusterServerResponse(Status.STATUS_SUCCESS, getGlusterServer(existingServer, serverName) +				.getGlusterServer());  	}  	@DELETE  	@Produces(MediaType.TEXT_XML)  	public Status removeServer(@QueryParam("serverName") String serverName) { -		return glusterUtil.removeServer(serverName); +		return getGlusterUtil().removeServer(serverName);  	}  	public static void main(String[] args) { diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/GlusterUtil.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/GlusterUtil.java index 13b8ef28..bc75a8ce 100644 --- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/GlusterUtil.java +++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/GlusterUtil.java @@ -92,6 +92,24 @@ public class GlusterUtil {  		return null;  	} +	private GlusterServer getKnownServer(String knownServer) { +		GlusterServer server = new GlusterServer(knownServer); +		server.setStatus(SERVER_STATUS.ONLINE); //TODO: If pingable +		//NOTE: No UUID assumed, it can be fetch while getting server details +		return server; +	} +	 +	 +	public GlusterServer getGlusterServer(String knownServer, String serverName) { +		List<GlusterServer> servers = getGlusterServers(knownServer); +		for(GlusterServer server : servers) { +			if(server.getName().equals(serverName)) { +				return server; +			} +		} +		return null; +	} +	  	public List<GlusterServer> getGlusterServers(String knownServer) {  		String output = getPeerStatus(knownServer);  		if (output == null) { @@ -99,6 +117,7 @@ public class GlusterUtil {  		}  		List<GlusterServer> glusterServers = new ArrayList<GlusterServer>(); +		glusterServers.add(getKnownServer(knownServer)); // Append the known server  		GlusterServer server = null;  		boolean foundHost = false;  		boolean foundUuid = false; diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/ServerUtil.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/ServerUtil.java index 23a8169d..5b953c3d 100644 --- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/ServerUtil.java +++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/ServerUtil.java @@ -49,7 +49,7 @@ import com.gluster.storage.management.core.utils.ProcessUtil;  public class ServerUtil {  	@Autowired  	ServletContext servletContext; -	 +  	@Autowired  	private SshUtil sshUtil; @@ -87,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); @@ -105,13 +105,13 @@ System.out.println(output);  	private String executeOnServer(String serverName, String commandWithArgs) {  		ProcessResult result = sshUtil.executeRemote(serverName, commandWithArgs); -		if(!result.isSuccess()) { +		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) { @@ -148,9 +148,9 @@ System.out.println(output);  	// throw new GlusterRuntimeException("Error during remote execution: [" + e.getMessage() + "]");  	// }  	// } -	 +  	public String getFileFromServer(String serverName, String fileName) { -		return executeOnServer(serverName, "get_file " + fileName);  +		return executeOnServer(serverName, "get_file " + fileName);  	}  	/** @@ -174,27 +174,30 @@ System.out.println(output);  			Unmarshaller um = context.createUnmarshaller();  			return um.unmarshal(new ByteArrayInputStream(input.getBytes()));  		} catch (JAXBException e) { -			if(tryGenericResponseOnFailure) { +			if (tryGenericResponseOnFailure) {  				// unmarshalling failed. try to unmarshal a GenericResponse object  				return unmarshal(GenericResponse.class, input, false);  			} -			 +  			return new Status(Status.STATUS_CODE_FAILURE, "Error during unmarshalling string [" + input  					+ "] for class [" + expectedClass.getName() + ": [" + e.getMessage() + "]");  		}  	} -	public static void main(String args[]) throws Exception { -		// CreateVolumeExportDirectory.py md0 testvol -		System.out.println(new ServerUtil().getFileFromServer("localhost", "/tmp/python/PeerAgent.py")); -	} -  	/** -	 * @param serverName Server on which the directory is present -	 * @param brickDir Directory whose disk is to be fetched +	 * @param serverName +	 *            Server on which the directory is present +	 * @param brickDir +	 *            Directory whose disk is to be fetched  	 * @return Status object containing the disk name, or error message in case the remote script fails.  	 */  	public Status getDiskForDir(String serverName, String brickDir) {  		return (Status) executeOnServer(true, serverName, REMOTE_SCRIPT_GET_DISK_FOR_DIR + " " + brickDir, Status.class);  	} + +	public static void main(String args[]) throws Exception { +		// CreateVolumeExportDirectory.py md0 testvol +		System.out.println(new ServerUtil().getFileFromServer("localhost", "/tmp/python/PeerAgent.py")); +	} +  }  | 
