diff options
| author | Shireesh Anjal <shireesh@gluster.com> | 2011-02-07 11:54:37 +0530 | 
|---|---|---|
| committer | Shireesh Anjal <shireesh@gluster.com> | 2011-02-07 11:54:37 +0530 | 
| commit | 2407f1c133f256718dbdc3eb411c384db470b43d (patch) | |
| tree | 4864e683a4e3e1b0d0c3c9cce40b4bd248974834 | |
| parent | 35a759331e88d926330b9f4a072b13a2fbd186a7 (diff) | |
auto-discovery service
Signed-off-by: Shireesh Anjal <shireesh@gluster.com>
10 files changed, 202 insertions, 0 deletions
diff --git a/com.gluster.storage.management.client/src/com/gluster/storage/management/client/ServerResource.java b/com.gluster.storage.management.client/src/com/gluster/storage/management/client/ServerResource.java new file mode 100644 index 00000000..e541ca74 --- /dev/null +++ b/com.gluster.storage.management.client/src/com/gluster/storage/management/client/ServerResource.java @@ -0,0 +1,33 @@ +package com.gluster.storage.management.client;
 +
 +import java.net.URI;
 +import java.util.List;
 +
 +import javax.ws.rs.core.MediaType;
 +import javax.ws.rs.core.UriBuilder;
 +
 +import com.gluster.storage.management.core.model.ServerListResponse;
 +import com.gluster.storage.management.core.model.Server;
 +import com.sun.jersey.api.client.Client;
 +import com.sun.jersey.api.client.WebResource;
 +import com.sun.jersey.api.client.config.DefaultClientConfig;
 +
 +public class ServerResource {
 +	private final URI BASE_URI = UriBuilder.fromUri("http://localhost:8080/glustermc").build();
 +
 +	public List<Server> discoverServers() {
 +		WebResource service = Client.create(new DefaultClientConfig()).resource(BASE_URI);
 +		
 +		@SuppressWarnings("unchecked")
 +		ServerListResponse<Server> response = service.path("services").path("server").path("discover")
 +				.accept(MediaType.TEXT_XML).get(ServerListResponse.class);
 +		
 +		return response.getData();
 +	}
 +
 +	public static void main(String[] args) {
 +		ServerResource ServerResource = new ServerResource();
 +		List<Server> discoveredServers = ServerResource.discoverServers();
 +		System.out.println(discoveredServers.size());
 +	}
 +}
 diff --git a/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/AbstractServerResponse.java b/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/AbstractServerResponse.java new file mode 100644 index 00000000..3a695600 --- /dev/null +++ b/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/AbstractServerResponse.java @@ -0,0 +1,14 @@ +package com.gluster.storage.management.core.model;
 +
 +public abstract class AbstractServerResponse implements ServerResponse {
 +	private Status status;
 +
 +	@Override
 +	public Status getStatus() {
 +		return status;
 +	}
 +
 +	public void setStatus(Status status) {
 +		this.status = status;
 +	}
 +}
\ No newline at end of file diff --git a/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Disk.java b/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Disk.java index b5093627..1da6ae29 100644 --- a/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Disk.java +++ b/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Disk.java @@ -1,7 +1,10 @@  package com.gluster.storage.management.core.model; +import javax.xml.bind.annotation.XmlRootElement; +  import com.gluster.storage.management.core.utils.StringUtils; +@XmlRootElement  public class Disk extends Entity {  	public enum DISK_STATUS {  		READY, UNINITIALIZED, INITIALIZING, OFFLINE @@ -14,6 +17,10 @@ public class Disk extends Entity {  	private Double spaceInUse;  	private DISK_STATUS status; +	public Disk() { +		 +	} +	  	public Double getSpace() {  		return space;  	} diff --git a/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Entity.java b/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Entity.java index 8c56a035..cc29b3fb 100644 --- a/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Entity.java +++ b/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Entity.java @@ -3,10 +3,13 @@ package com.gluster.storage.management.core.model;  import java.util.ArrayList;  import java.util.List; +import javax.xml.bind.annotation.XmlRootElement; +  import org.eclipse.core.runtime.PlatformObject;  import com.gluster.storage.management.core.utils.StringUtils; +@XmlRootElement  public class Entity extends PlatformObject implements Filterable {  	private static final long serialVersionUID = 1L; @@ -14,6 +17,10 @@ public class Entity extends PlatformObject implements Filterable {  	protected List<Entity> children = new ArrayList<Entity>();  	private Entity parent; +	public Entity() { +		 +	} +	  	public String getName() {  		return name;  	} diff --git a/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/NetworkInterface.java b/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/NetworkInterface.java index 375b1971..7e950bb7 100644 --- a/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/NetworkInterface.java +++ b/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/NetworkInterface.java @@ -1,11 +1,18 @@  package com.gluster.storage.management.core.model; +import javax.xml.bind.annotation.XmlRootElement; + +@XmlRootElement  public class NetworkInterface extends Entity {  	private String ipAddress;  	private String netMask;  	private String defaultGateway;  	private boolean isPreferred; +	public NetworkInterface() { +		 +	} +	  	public boolean isPreferred() {  		return isPreferred;  	} diff --git a/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Server.java b/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Server.java index b7e56ba4..d45b7268 100644 --- a/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Server.java +++ b/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Server.java @@ -3,8 +3,13 @@ package com.gluster.storage.management.core.model;  import java.util.ArrayList;  import java.util.List; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlElementWrapper; +import javax.xml.bind.annotation.XmlRootElement; +  import com.gluster.storage.management.core.utils.StringUtils; +@XmlRootElement  public class Server extends Entity {  	private List<NetworkInterface> networkInterfaces = new ArrayList<NetworkInterface>();  	private int numOfCPUs; @@ -15,6 +20,10 @@ public class Server extends Entity {  	private double diskSpaceInUse = 0;  	private List<Disk> disks = new ArrayList<Disk>(); +	public Server() { +		 +	} +	  	public Server(String name, Entity parent, int numOfCPUs, double cpuUsage, double totalMemory, double memoryInUse) {  		super(name, parent);  		setNumOfCPUs(numOfCPUs); @@ -63,6 +72,8 @@ public class Server extends Entity {  		return diskSpaceInUse;  	} +	@XmlElementWrapper(name="networkInterfaces") +	@XmlElement(name="networkInterface", type=NetworkInterface.class)  	public List<NetworkInterface> getNetworkInterfaces() {  		return networkInterfaces;  	} @@ -71,6 +82,8 @@ public class Server extends Entity {  		this.networkInterfaces = networkInterfaces;  	} +	@XmlElementWrapper(name="disks") +	@XmlElement(name="disk", type=Disk.class)  	public List<Disk> getDisks() {  		return disks;  	} diff --git a/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/ServerListResponse.java b/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/ServerListResponse.java new file mode 100644 index 00000000..8f142a70 --- /dev/null +++ b/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/ServerListResponse.java @@ -0,0 +1,23 @@ +package com.gluster.storage.management.core.model;
 +
 +import java.util.List;
 +
 +import javax.xml.bind.annotation.XmlElement;
 +import javax.xml.bind.annotation.XmlElementWrapper;
 +import javax.xml.bind.annotation.XmlRootElement;
 +
 +@XmlRootElement(name="response")
 +public class ServerListResponse<T extends Server> extends AbstractServerResponse {
 +	private List<T> servers;
 +	
 +	@Override
 +	@XmlElementWrapper(name="servers")
 +	@XmlElement(name="server", type=Server.class)
 +	public List<T> getData() {
 +		return servers;
 +	}
 +
 +	public void setServers(List<T> data) {
 +		this.servers = data;
 +	}
 +}
 diff --git a/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/ServerResponse.java b/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/ServerResponse.java new file mode 100644 index 00000000..3edf2627 --- /dev/null +++ b/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/ServerResponse.java @@ -0,0 +1,19 @@ +package com.gluster.storage.management.core.model;
 +
 +/**
 + * Interface for server response. Any request handled by the Gluster Management
 + * Server will result in a response that must be an instance of a class
 + * implementing this interface.
 + */
 +public interface ServerResponse {
 +	/**
 +	 * @return Status of request processing
 +	 */
 +	public Status getStatus();
 +
 +	/**
 +	 * @return Data associated with the response. e.g. A "discover servers"
 +	 *         request will return the list of discovered servers.
 +	 */
 +	public Object getData();
 +}
 diff --git a/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Status.java b/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Status.java new file mode 100644 index 00000000..37d2e18c --- /dev/null +++ b/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Status.java @@ -0,0 +1,44 @@ +package com.gluster.storage.management.core.model;
 +
 +import javax.xml.bind.annotation.XmlElement;
 +import javax.xml.bind.annotation.XmlRootElement;
 +import com.gluster.storage.management.core.utils.ProcessResult;
 +
 +@XmlRootElement(name="status")
 +public class Status {
 +	@XmlElement(name="code", type=Integer.class)
 +	private Integer code;
 +	
 +	private String message;
 +
 +	public Status() {
 +	}
 +
 +	public boolean isSuccess() {
 +		return code == 0;
 +	}
 +
 +	public Status(Integer executionStatus, String xmlData) {
 +		this.code = executionStatus;
 +	}
 +
 +	public Status(ProcessResult result) {
 +		this.code = result.getExitValue();
 +	}
 +
 +	public String getCode() {
 +		return code.toString();
 +	}
 +
 +	public void setCode(Integer executionStatus) {
 +		this.code = executionStatus;
 +	}
 +
 +	public String getMessage() {
 +		return message;
 +	}
 +
 +	public void setMessage(String message) {
 +		this.message = message;
 +	}
 +}
\ No newline at end of file diff --git a/com.gluster.storage.management.server/src/com/gluster/storage/management/server/services/ServerResource.java b/com.gluster.storage.management.server/src/com/gluster/storage/management/server/services/ServerResource.java new file mode 100644 index 00000000..ccbb77e6 --- /dev/null +++ b/com.gluster.storage.management.server/src/com/gluster/storage/management/server/services/ServerResource.java @@ -0,0 +1,35 @@ +package com.gluster.storage.management.server.services;
 +
 +import java.io.File;
 +
 +import javax.ws.rs.GET;
 +import javax.ws.rs.Path;
 +import javax.ws.rs.Produces;
 +import javax.ws.rs.core.MediaType;
 +
 +import com.gluster.storage.management.core.utils.FileUtil;
 +
 +@Path("/server")
 +public class ServerResource {
 +	// TODO: xml should be read from a "work" directory under the tomcat server.
 +	// Use relative path - do not hard code the absolute path.
 +	public static final String DISCOVERED_SERVERS_XML = "/GLUSTER/discovered-servers.xml";
 +
 +	/**
 +	 * Discover newly available servers
 +	 * 
 +	 * @return list of discovered servers
 +	 */
 +	private String GetDiscoveredServers() {
 +		File discoveredServersFile = new File(DISCOVERED_SERVERS_XML);
 +		String serverNames = new FileUtil().readFileAsString(discoveredServersFile);
 +		return serverNames;
 +	}
 +
 +	@Path("/discover")
 +	@GET
 +	@Produces(MediaType.TEXT_XML)
 +	public String discoveredServers() {
 +		return GetDiscoveredServers();
 +	}
 +}
  | 
