summaryrefslogtreecommitdiffstats
path: root/src/com.gluster.storage.management.server
diff options
context:
space:
mode:
authorselvam <selvam@selvam-Studio-XPS-1340.(none)>2011-05-24 20:03:21 +0530
committerselvam <selvam@selvam-Studio-XPS-1340.(none)>2011-05-24 20:03:21 +0530
commit7b78baadb7dd100940a4d6ddb5ca33826a3a5ce1 (patch)
treec351ecdcdc4fe22c51d6186d921a6f95889e0985 /src/com.gluster.storage.management.server
parentb321add074a8b8413f9285bac7458a1d4ceea60c (diff)
Story:#15 task:#81 Intergrate interface changes in the server, model and UI
Diffstat (limited to 'src/com.gluster.storage.management.server')
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/AbstractServersResource.java31
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/DiscoveredServersResource.java39
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/GlusterServersResource.java57
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/ServerUtil.java78
4 files changed, 128 insertions, 77 deletions
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);
}