diff options
| author | Shireesh Anjal <shireesh@gluster.com> | 2011-03-14 21:30:21 +0530 |
|---|---|---|
| committer | Shireesh Anjal <shireesh@gluster.com> | 2011-03-14 21:30:21 +0530 |
| commit | 685135f3fc4dce58e975d225e19336cde9382e3d (patch) | |
| tree | 5d733bc0bb9ae74a2d62468f191e0042b86ef86c /com.gluster.storage.management.server/src | |
| parent | d20cf95b122f7b08614da2e4e14267e34b8262dd (diff) | |
Introduced abstract servers resource
Diffstat (limited to 'com.gluster.storage.management.server/src')
4 files changed, 111 insertions, 37 deletions
diff --git a/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/AbstractServersResource.java b/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/AbstractServersResource.java new file mode 100644 index 00000000..004160a7 --- /dev/null +++ b/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/AbstractServersResource.java @@ -0,0 +1,79 @@ +/** + * AbstractServersResource.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.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; + +/** + * 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; + + /** + * Fetch details of the given server. The server name must be populated in the object before calling this method. + * + * @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); + } + + /** + * @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)); + } + + 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 + */ + 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)); + } +} 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 63b5cdff..82d0551d 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 @@ -40,7 +40,7 @@ import com.sun.jersey.spi.resource.Singleton; @Component @Singleton @Path("/discoveredservers") -public class DiscoveredServersResource { +public class DiscoveredServersResource extends AbstractServersResource { private List<String> discoveredServerNames = new ArrayList<String>(); public List<String> getDiscoveredServerNames() { @@ -50,7 +50,6 @@ public class DiscoveredServersResource { @GET @Produces(MediaType.TEXT_XML) public Response getDiscoveredServers(@QueryParam("details") Boolean getDetails) { - System.out.println(getDetails); if(getDetails != null && getDetails == true) { return new ServerListResponse<Server>(Status.STATUS_SUCCESS, getDiscoveredServerDetails()); } @@ -61,9 +60,7 @@ public class DiscoveredServersResource { List<Server> discoveredServers = new ArrayList<Server>(); List<String> serverNames = getDiscoveredServerNames(); for (String serverName : serverNames) { - // TODO. Dummy data for now. - Server server = new Server(serverName, null, 4, 58.3d, 4d, 2.87d); - discoveredServers.add(server); + discoveredServers.add(getDiscoveredServer(serverName)); } return discoveredServers; } @@ -78,7 +75,8 @@ public class DiscoveredServersResource { @GET @Produces(MediaType.TEXT_XML) public Server getDiscoveredServer(@PathParam("serverName") String serverName) { - Server server = new Server(serverName, null, 4, 58.3d, 4d, 2.87d); + Server server = new Server(serverName); + fetchServerDetails(server); return server; } diff --git a/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/GlusterServersResource.java b/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/GlusterServersResource.java index e160bc2f..342444f1 100644 --- a/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/GlusterServersResource.java +++ b/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/GlusterServersResource.java @@ -32,60 +32,57 @@ import javax.ws.rs.core.MediaType; import org.springframework.stereotype.Component; import com.gluster.storage.management.core.model.GenericResponse; +import com.gluster.storage.management.core.model.GlusterServer; 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.GlusterUtil; import com.gluster.storage.management.core.utils.ProcessResult; -import com.gluster.storage.management.core.utils.ProcessUtil; import com.sun.jersey.spi.resource.Singleton; @Component @Singleton @Path("/cluster/servers") -public class GlusterServersResource { +public class GlusterServersResource extends AbstractServersResource { private GlusterUtil glusterUtil = new GlusterUtil(); public static final String HOSTNAMETAG = "hostname:"; - private List<Server> getServerDetails() { - List<Server> glusterServers = new ArrayList<Server>(); - List<String> serverNames = glusterUtil.getGlusterServerNames(); - for (String serverName : serverNames) { - // TODO: With the new design of dedicated management server, this logic has to change. - // GlusterServersClient client = new GlusterServersClient(serverName); - // Server server = client.getServer("me"); - // glusterServers.add(server); + private List<GlusterServer> getServerDetails() { + List<GlusterServer> glusterServers = new ArrayList<GlusterServer>(); + for (String serverName : glusterUtil.getGlusterServerNames()) { + glusterServers.add(getGlusterServer(serverName)); } return glusterServers; } @GET @Produces(MediaType.TEXT_XML) - public ServerListResponse<Server> getServers() { - return new ServerListResponse<Server>(Status.STATUS_SUCCESS, getServerDetails()); + public ServerListResponse<GlusterServer> getGlusterServers() { + return new ServerListResponse<GlusterServer>(Status.STATUS_SUCCESS, getServerDetails()); } @GET @Path("{serverName}") @Produces(MediaType.TEXT_XML) - public String getGlusterServer(@PathParam("serverName") String serverName) { - // TODO: With new design of dedicated management server, this concept won't work. Need to change. - 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 GlusterServersClient(serverName).getServerXML("me"); - return null; + public GlusterServer getGlusterServer(@PathParam("serverName") String serverName) { + GlusterServer server = new GlusterServer(serverName); + fetchServerDetails(server); + return server; } - public String getThisServer() { - ProcessResult result = new ProcessUtil().executeCommand("get-server-details.py"); - if (!result.isSuccess()) { - // TODO:Generate error message and return - } - return result.getOutput(); + /* + * (non-Javadoc) + * + * @see + * com.gluster.storage.management.server.resources.AbstractServersResource#fetchServerDetails(com.gluster.storage + * .management.core.model.Server) + */ + @Override + protected void fetchServerDetails(Server server) { + // fetch standard server details like cpu, disk, memory details + super.fetchServerDetails(server); + + // TODO: Fetch gluster server details like status } @POST @@ -94,9 +91,10 @@ public class GlusterServersResource { ProcessResult result = glusterUtil.addServer(serverName); if (!result.isSuccess()) { - return new GenericResponse<String>(Status.STATUS_FAILURE, "Add server failed: [" + result.getOutput() + "]"); + return new GenericResponse<String>(Status.STATUS_FAILURE, "Add server failed: ]" + result.getExitValue() + + "][" + result.getOutput() + "]"); } - return new GenericResponse<String>(Status.STATUS_SUCCESS, "Server added successfully!"); + return new GenericResponse<String>(Status.STATUS_SUCCESS, "Server [" + serverName + "] added successfully!"); } public static void main(String[] args) { 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 9a2a7e47..9fcb28e6 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 @@ -61,7 +61,6 @@ public class ServerDiscoveryTask { private String environment; public void discoverServers() { - 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>()); |
