From 0653bd1dfa727cbeb29a5f1723841b532ac13172 Mon Sep 17 00:00:00 2001 From: Shireesh Anjal Date: Thu, 10 Feb 2011 14:39:22 +0530 Subject: auto-discovery --- .../resources/DiscoveredServersResource.java | 105 +++++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/DiscoveredServersResource.java (limited to 'com.gluster.storage.management.server/src/com') 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 new file mode 100644 index 00000000..f3809ebd --- /dev/null +++ b/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/DiscoveredServersResource.java @@ -0,0 +1,105 @@ +/******************************************************************************* + * Copyright (c) 2011 Gluster, Inc. + * 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 + * . + *******************************************************************************/ +package com.gluster.storage.management.server.resources; + +import java.util.ArrayList; +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.core.MediaType; + +import org.springframework.stereotype.Component; + +import com.gluster.storage.management.client.DiscoveredServersClient; +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.ProcessResult; +import com.gluster.storage.management.core.utils.ProcessUtil; +import com.sun.jersey.spi.resource.Singleton; + +@Component +@Singleton +@Path("/discoveredservers") +public class DiscoveredServersResource { + private List discoveredServerNames; + + // 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"; + + private List getDiscoveredServerNames() { + // TODO: Run required python script get list of discovered servers and return the same + return null; + } + + @GET + @Produces(MediaType.TEXT_XML) + public ServerListResponse getDiscoveredServers() { +// File discoveredServersFile = new File(DISCOVERED_SERVERS_XML); +// String serverNames = new FileUtil().readFileAsString(discoveredServersFile); + + ServerListResponse response = new ServerListResponse(); + response.setServers(getDiscoveredServerDetails()); + response.setStatus(Status.STATUS_SUCCESS); + + return response; + } + + private List getDiscoveredServerDetails() { + List discoveredServers = new ArrayList(); + List serverNames = getDiscoveredServerNames(); + for(String serverName : serverNames) { + DiscoveredServersClient client = new DiscoveredServersClient(); + Server server = client.getServer(serverName); + discoveredServers.add(server); + } + return discoveredServers; + } + + public void setDiscoveredServerNames(List discoveredServerNames) { + synchronized (discoveredServerNames) { + this.discoveredServerNames = discoveredServerNames; + } + } + + @Path("/{serverName}") + @GET + @Produces(MediaType.TEXT_XML) + public String getDiscoveredServer(@PathParam("serverName") String serverName) { + if(serverName.equals("me")) { + return getThisServer(); + } + + // Fetch details of given server by sending a REST request to that server + return new DiscoveredServersClient().getServerXML(serverName); + } + + public String getThisServer() { + ProcessResult result = new ProcessUtil().executeCommand("get-server-details.py"); + if (!result.isSuccess()) { + // TODO:Generate error message and return + } + return result.getOutput(); + } + +} -- cgit