diff options
Diffstat (limited to 'com.gluster.storage.management.server/src')
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 |
