summaryrefslogtreecommitdiffstats
path: root/com.gluster.storage.management.server/src
diff options
context:
space:
mode:
authorShireesh Anjal <shireesh@gluster.com>2011-03-14 17:56:52 +0530
committerShireesh Anjal <shireesh@gluster.com>2011-03-14 17:56:52 +0530
commitd20cf95b122f7b08614da2e4e14267e34b8262dd (patch)
tree7f6c052704f49a2bffd25ee68423178506f260a9 /com.gluster.storage.management.server/src
parentfa113e22d419fcd16f5eb8c579131ffa65ed4b5e (diff)
Audo discovery changes
Diffstat (limited to 'com.gluster.storage.management.server/src')
-rw-r--r--com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/DiscoveredServersResource.java62
-rw-r--r--com.gluster.storage.management.server/src/com/gluster/storage/management/server/tasks/ServerDiscoveryTask.java31
-rw-r--r--com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/ServerUtil.java58
3 files changed, 97 insertions, 54 deletions
diff --git a/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/DiscoveredServersResource.java b/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/DiscoveredServersResource.java
index 7e0221ac..63b5cdff 100644
--- a/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/DiscoveredServersResource.java
+++ b/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/DiscoveredServersResource.java
@@ -18,58 +18,52 @@
*******************************************************************************/
package com.gluster.storage.management.server.resources;
-import java.io.File;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.List;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;
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.ServerListResponse;
import com.gluster.storage.management.core.model.Status;
-import com.gluster.storage.management.core.utils.FileUtil;
-import com.gluster.storage.management.core.utils.ProcessResult;
-import com.gluster.storage.management.core.utils.ProcessUtil;
+import com.gluster.storage.management.core.model.StringListResponse;
import com.sun.jersey.spi.resource.Singleton;
@Component
@Singleton
@Path("/discoveredservers")
public class DiscoveredServersResource {
- private List<String> discoveredServerNames;
+ private List<String> discoveredServerNames = new ArrayList<String>();
- // 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 = "/GLUSTER/discovered-server-names";
-
- private List<String> getDiscoveredServerNames() {
- File discoveredServersFile = new File(DISCOVERED_SERVERS);
- String serverNames = new FileUtil().readFileAsString(discoveredServersFile);
- String[] parts = serverNames.split("\n");
- return Arrays.asList(parts);
+ public List<String> getDiscoveredServerNames() {
+ return discoveredServerNames;
}
@GET
@Produces(MediaType.TEXT_XML)
- public ServerListResponse<Server> getDiscoveredServers() {
- return new ServerListResponse<Server>(Status.STATUS_SUCCESS, getDiscoveredServerDetails());
+ public Response getDiscoveredServers(@QueryParam("details") Boolean getDetails) {
+ System.out.println(getDetails);
+ if(getDetails != null && getDetails == true) {
+ return new ServerListResponse<Server>(Status.STATUS_SUCCESS, getDiscoveredServerDetails());
+ }
+ return new StringListResponse(getDiscoveredServerNames());
}
private List<Server> getDiscoveredServerDetails() {
List<Server> discoveredServers = new ArrayList<Server>();
List<String> serverNames = getDiscoveredServerNames();
for (String serverName : serverNames) {
- // TODO: With the new design of dedicated management server, this logic has to change.
- // DiscoveredServersClient client = new DiscoveredServersClient(serverName);
- // Server server = client.getServer("me");
- // discoveredServers.add(server);
+ // TODO. Dummy data for now.
+ Server server = new Server(serverName, null, 4, 58.3d, 4d, 2.87d);
+ discoveredServers.add(server);
}
return discoveredServers;
}
@@ -83,29 +77,15 @@ public class DiscoveredServersResource {
@Path("/{serverName}")
@GET
@Produces(MediaType.TEXT_XML)
- public String getDiscoveredServer(@PathParam("serverName") String serverName) {
- if (serverName.equals("me")) {
- return getThisServer();
- }
-
- // TODO: With the new design of dedicated management server, this logic has to change.
- // Fetch details of given server by sending a REST request to that server
- // return new DiscoveredServersClient(serverName).getServerXML("me");
- return null;
- }
-
- public String getThisServer() {
- ProcessResult result = new ProcessUtil().executeCommand("get-server-details.py");
- if (!result.isSuccess()) {
- // TODO:Generate error message and return
- }
- return result.getOutput();
+ public Server getDiscoveredServer(@PathParam("serverName") String serverName) {
+ Server server = new Server(serverName, null, 4, 58.3d, 4d, 2.87d);
+ return server;
}
public static void main(String[] args) {
- ServerListResponse<Server> listResponse = new DiscoveredServersResource().getDiscoveredServers();
- for (Server server : listResponse.getServers()) {
- System.out.println(server.getName());
+ StringListResponse listResponse = (StringListResponse)new DiscoveredServersResource().getDiscoveredServers(false);
+ for (String server : listResponse.getData()) {
+ System.out.println(server);
}
}
}
diff --git a/com.gluster.storage.management.server/src/com/gluster/storage/management/server/tasks/ServerDiscoveryTask.java b/com.gluster.storage.management.server/src/com/gluster/storage/management/server/tasks/ServerDiscoveryTask.java
index c4b4bdb8..9a2a7e47 100644
--- a/com.gluster.storage.management.server/src/com/gluster/storage/management/server/tasks/ServerDiscoveryTask.java
+++ b/com.gluster.storage.management.server/src/com/gluster/storage/management/server/tasks/ServerDiscoveryTask.java
@@ -21,6 +21,7 @@
package com.gluster.storage.management.server.tasks;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
import javax.servlet.ServletContext;
@@ -28,7 +29,10 @@ import javax.servlet.ServletContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
+import com.gluster.storage.management.core.constants.CoreConstants;
+import com.gluster.storage.management.core.utils.ProcessResult;
import com.gluster.storage.management.server.resources.DiscoveredServersResource;
+import com.gluster.storage.management.server.utils.ServerUtil;
import com.sun.jersey.spi.resource.Singleton;
/**
@@ -42,7 +46,10 @@ public class ServerDiscoveryTask {
private static final String ENV_AWS = "aws";
private static final String ENV_VMWARE = "vmware";
private static final String ENV_PHYCAL = "physical";
+ private static final String SCRIPT_NAME_SFX = "-discover-servers.py";
+ @Autowired
+ private ServerUtil serverUtil;
@Autowired
private ServletContext servletContext;
@@ -54,18 +61,16 @@ public class ServerDiscoveryTask {
private String environment;
public void discoverServers() {
- System.out.println("Starting discovery in [" + environment + "] environment");
-
- /**
- * TODO: Flow should be as follows <br>
- * 1) Get the discovery policy specific for the environment <br>
- * 2) Execute discovery to get list of auto-discovered server <br>
- * 3) Set the discovered servers list in the discovered servers resource <br>
- */
-
- List<String> discoveredServers = new ArrayList<String>();
- discoveredServers.add("yserver1");
-
- discoveredServersResource.setDiscoveredServerNames(discoveredServers);
+ System.out.println("Starting auto-discovery in [" + environment + "] environment");
+ List<String> serverNameList = new ArrayList<String>();
+
+ ProcessResult result = serverUtil.executeGlusterScript(true, environment + SCRIPT_NAME_SFX, new ArrayList<String>());
+ if(result.isSuccess()) {
+ String serverNames = result.getOutput();
+ String[] parts = serverNames.split(CoreConstants.NEWLINE);
+ serverNameList = Arrays.asList(parts);
+ }
+
+ discoveredServersResource.setDiscoveredServerNames(serverNameList);
}
} \ No newline at end of file
diff --git a/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/ServerUtil.java b/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/ServerUtil.java
new file mode 100644
index 00000000..1d237461
--- /dev/null
+++ b/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/ServerUtil.java
@@ -0,0 +1,58 @@
+/**
+ * ServerUtil.java
+ *
+ * Copyright (c) 2011 Gluster, Inc. <http://www.gluster.com>
+ * This file is part of Gluster Management Console.
+ *
+ * Gluster Management Console is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Affero General Public License as published
+ * by the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Gluster Management Console is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see
+ * <http://www.gnu.org/licenses/>.
+ */
+package com.gluster.storage.management.server.utils;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.servlet.ServletContext;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import com.gluster.storage.management.core.constants.CoreConstants;
+import com.gluster.storage.management.core.utils.ProcessResult;
+import com.gluster.storage.management.core.utils.ProcessUtil;
+import com.sun.jersey.spi.resource.Singleton;
+
+@Singleton
+@Component
+public class ServerUtil {
+ @Autowired
+ ServletContext servletContext;
+
+ private static final String SCRIPT_DIR = "scripts";
+ private static final String SCRIPT_COMMAND = "python";
+
+ public ProcessResult executeGlusterScript(boolean runInForeground, String scriptName, List<String> arguments) {
+ List<String> command = new ArrayList<String>();
+
+ command.add(SCRIPT_COMMAND);
+ command.add(getScriptPath(scriptName));
+ command.addAll(arguments);
+ return new ProcessUtil().executeCommand(runInForeground, command);
+ }
+
+ private String getScriptPath(String scriptName) {
+ String scriptPath = servletContext.getRealPath(SCRIPT_DIR) + CoreConstants.FILE_SEPARATOR + scriptName;
+ return scriptPath;
+ }
+} \ No newline at end of file