summaryrefslogtreecommitdiffstats
path: root/src
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-25 17:41:01 +0530
commitf3e001d3f468c466e04f7e0580f5ee225916a47f (patch)
treed2800b3a188765b864697879e74300ec7d69fa9b /src
parenta34859e239778485565d57f8ddd33c97653af968 (diff)
Story:#15 task:#81 Intergrate interface changes in the server, model and UI
Diffstat (limited to 'src')
-rw-r--r--src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/DiscoveredServersClient.java11
-rw-r--r--src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterDataModelManager.java3
-rw-r--r--src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterServersClient.java7
-rw-r--r--src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/GlusterServer.java4
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/NetworkInterfaceTableLabelProvider.java3
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/GlusterServerSummaryView.java9
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/details/tabcreators/GlusterServerTabCreator.java42
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/AbstractServersResource.java62
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/DiscoveredServersResource.java48
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/GlusterServersResource.java85
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/GlusterUtil.java19
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/ServerUtil.java33
12 files changed, 162 insertions, 164 deletions
diff --git a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/DiscoveredServersClient.java b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/DiscoveredServersClient.java
index 3c3ef401..a1dad796 100644
--- a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/DiscoveredServersClient.java
+++ b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/DiscoveredServersClient.java
@@ -18,11 +18,8 @@
*******************************************************************************/
package com.gluster.storage.management.client;
-import java.util.List;
-
import javax.ws.rs.core.MultivaluedMap;
-import com.gluster.storage.management.core.model.Response;
import com.gluster.storage.management.core.model.Server;
import com.gluster.storage.management.core.response.GenericResponse;
import com.gluster.storage.management.core.response.ServerListResponse;
@@ -32,7 +29,7 @@ import com.sun.jersey.core.util.MultivaluedMapImpl;
public class DiscoveredServersClient extends AbstractClient {
private static final String RESOURCE_NAME = "discoveredservers";
- public DiscoveredServersClient(String serverName, String securityToken) {
+ public DiscoveredServersClient(String securityToken) {
super(securityToken);
}
@@ -45,8 +42,7 @@ public class DiscoveredServersClient extends AbstractClient {
private Object getDiscoveredServers(Boolean getDetails, Class responseClass) {
MultivaluedMap<String, String> queryParams = new MultivaluedMapImpl();
queryParams.putSingle("details", getDetails.toString());
- // return ((Response) fetchResource(queryParams, responseClass)).getData();
- return responseClass.cast(fetchResource(queryParams, responseClass));
+ return fetchResource(queryParams, responseClass);
}
public StringListResponse getDiscoveredServerNames() {
@@ -67,8 +63,7 @@ public class DiscoveredServersClient extends AbstractClient {
public static void main(String[] args) {
UsersClient usersClient = new UsersClient();
if (usersClient.authenticate("gluster", "gluster").isSuccess()) {
- DiscoveredServersClient serverResource = new DiscoveredServersClient("localhost",
- usersClient.getSecurityToken());
+ DiscoveredServersClient serverResource = new DiscoveredServersClient(usersClient.getSecurityToken());
StringListResponse discoveredServerNames = serverResource.getDiscoveredServerNames();
System.out.println(discoveredServerNames.getData());
ServerListResponse discoveredServers = serverResource.getDiscoveredServerDetails();
diff --git a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterDataModelManager.java b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterDataModelManager.java
index 3ef5f87f..1319cec5 100644
--- a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterDataModelManager.java
+++ b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterDataModelManager.java
@@ -55,7 +55,6 @@ public class GlusterDataModelManager {
private static GlusterDataModelManager instance = new GlusterDataModelManager();
private GlusterDataModel model;
private String securityToken;
- private String serverName;
private List<ClusterListener> listeners = new ArrayList<ClusterListener>();
private List<VolumeOptionInfo> volumeOptionsDefaults;
@@ -107,7 +106,7 @@ public class GlusterDataModelManager {
}
private void initializeAutoDiscoveredServers(Cluster cluster) {
- ServerListResponse discoveredServerListResponse = new DiscoveredServersClient(serverName, securityToken).getDiscoveredServerDetails();
+ ServerListResponse discoveredServerListResponse = new DiscoveredServersClient(securityToken).getDiscoveredServerDetails();
if (!discoveredServerListResponse.getStatus().isSuccess()) {
throw new GlusterRuntimeException(discoveredServerListResponse.getStatus().getMessage());
}
diff --git a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterServersClient.java b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterServersClient.java
index 6d164993..8368ceea 100644
--- a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterServersClient.java
+++ b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterServersClient.java
@@ -44,7 +44,6 @@ public class GlusterServersClient extends AbstractClient {
return RESOURCE_NAME;
}
- // public List<GlusterServer> getServers(String knownServer) {
public GlusterServerListResponse getServers(String knownServer) {
MultivaluedMap<String, String> queryParams = new MultivaluedMapImpl();
queryParams.add(RESTConstants.QUERY_PARAM_KNOWN_SERVER, knownServer);
@@ -78,8 +77,8 @@ public class GlusterServersClient extends AbstractClient {
UsersClient usersClient = new UsersClient();
if (usersClient.authenticate("gluster", "gluster").isSuccess()) {
- GlusterServersClient serverResource = new GlusterServersClient(usersClient.getSecurityToken());
- List<GlusterServer> glusterServers = serverResource.getServers("127.0.0.1").getData();
+ GlusterServersClient glusterServersClient = new GlusterServersClient(usersClient.getSecurityToken());
+ List<GlusterServer> glusterServers = glusterServersClient.getServers("127.0.0.1").getData();
for (GlusterServer server : glusterServers) {
System.out.println(server.getName());
}
@@ -87,7 +86,7 @@ public class GlusterServersClient extends AbstractClient {
// Add server
Server srv = new Server();
srv.setName("server3");
- GlusterServerResponse response = serverResource.addServer(srv);
+ GlusterServerResponse response = glusterServersClient.addServer(srv);
System.out.println(response.getGlusterServer().getName());
System.out.println(response.getStatus().isSuccess());
diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/GlusterServer.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/GlusterServer.java
index c7748f9c..a9455f48 100644
--- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/GlusterServer.java
+++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/GlusterServer.java
@@ -53,6 +53,10 @@ public class GlusterServer extends Server {
this(name, parent, status, numOfCPUs, cpuUsage, totalMemory, memoryInUse);
setCluster(cluster);
}
+
+ public Boolean isOnline() {
+ return getStatus() == SERVER_STATUS.ONLINE;
+ }
public String getStatusStr() {
return STATUS_STR[getStatus().ordinal()];
diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/NetworkInterfaceTableLabelProvider.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/NetworkInterfaceTableLabelProvider.java
index 760d8346..78f703ea 100644
--- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/NetworkInterfaceTableLabelProvider.java
+++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/NetworkInterfaceTableLabelProvider.java
@@ -32,10 +32,11 @@ public class NetworkInterfaceTableLabelProvider extends TableLabelProviderAdapte
NetworkInterface networkInterface = (NetworkInterface) element;
String columnText = (columnIndex == NETWORK_INTERFACE_TABLE_COLUMN_INDICES.INTERFACE.ordinal() ? networkInterface.getName()
+ : columnIndex == NETWORK_INTERFACE_TABLE_COLUMN_INDICES.MODEL.ordinal() ? networkInterface.getModel()
+ : columnIndex == NETWORK_INTERFACE_TABLE_COLUMN_INDICES.SPEED.ordinal() ? networkInterface.getSpeed()
: columnIndex == NETWORK_INTERFACE_TABLE_COLUMN_INDICES.IP_ADDRESS.ordinal() ? networkInterface.getIpAddress()
: columnIndex == NETWORK_INTERFACE_TABLE_COLUMN_INDICES.NETMASK.ordinal() ? networkInterface.getNetMask()
: columnIndex == NETWORK_INTERFACE_TABLE_COLUMN_INDICES.GATEWAY.ordinal() ? networkInterface.getDefaultGateway()
- // : columnIndex == NETWORK_INTERFACE_TABLE_COLUMN_INDICES.PREFERRED.ordinal() ? (networkInterface.isPreferred() ? "Yes" : "No")
: "Invalid");
return ((columnText == null || columnText.trim().equals("")) ? CoreConstants.NA : columnText);
}
diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/GlusterServerSummaryView.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/GlusterServerSummaryView.java
index d43cab15..8d3217f1 100644
--- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/GlusterServerSummaryView.java
+++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/GlusterServerSummaryView.java
@@ -57,11 +57,11 @@ public class GlusterServerSummaryView extends ViewPart {
private GlusterServer server;
public enum NETWORK_INTERFACE_TABLE_COLUMN_INDICES {
- INTERFACE, IP_ADDRESS, NETMASK, GATEWAY
+ INTERFACE, MODEL, SPEED, IP_ADDRESS, NETMASK, GATEWAY
};
- private static final String[] NETWORK_INTERFACE_TABLE_COLUMN_NAMES = { "Interface", "IP Address", "Netmask",
- "Gateway" };
+ private static final String[] NETWORK_INTERFACE_TABLE_COLUMN_NAMES = { "Interface", "Model", "Speed", "IP Address",
+ "Netmask", "Gateway" };
@Override
public void createPartControl(Composite parent) {
@@ -206,10 +206,11 @@ public class GlusterServerSummaryView extends ViewPart {
parent.setLayout(tableColumnLayout);
setColumnProperties(table, NETWORK_INTERFACE_TABLE_COLUMN_INDICES.INTERFACE, SWT.CENTER, 70);
+ setColumnProperties(table, NETWORK_INTERFACE_TABLE_COLUMN_INDICES.MODEL, SWT.CENTER, 70);
+ setColumnProperties(table, NETWORK_INTERFACE_TABLE_COLUMN_INDICES.SPEED, SWT.CENTER, 70);
setColumnProperties(table, NETWORK_INTERFACE_TABLE_COLUMN_INDICES.IP_ADDRESS, SWT.CENTER, 100);
setColumnProperties(table, NETWORK_INTERFACE_TABLE_COLUMN_INDICES.NETMASK, SWT.CENTER, 70);
setColumnProperties(table, NETWORK_INTERFACE_TABLE_COLUMN_INDICES.GATEWAY, SWT.CENTER, 70);
- // setColumnProperties(table, NETWORK_INTERFACE_TABLE_COLUMN_INDICES.PREFERRED, SWT.CENTER, 70);
}
private Composite createTableViewerComposite(Composite parent) {
diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/details/tabcreators/GlusterServerTabCreator.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/details/tabcreators/GlusterServerTabCreator.java
index e1aa59ff..00318373 100644
--- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/details/tabcreators/GlusterServerTabCreator.java
+++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/details/tabcreators/GlusterServerTabCreator.java
@@ -58,18 +58,18 @@ import com.richclientgui.toolbox.gauges.CoolGauge;
public class GlusterServerTabCreator implements TabCreator {
public enum NETWORK_INTERFACE_TABLE_COLUMN_INDICES {
- INTERFACE, IP_ADDRESS, NETMASK, GATEWAY
+ INTERFACE, MODEL, SPEED, IP_ADDRESS, NETMASK, GATEWAY
};
- private static final String[] NETWORK_INTERFACE_TABLE_COLUMN_NAMES = { "Interface", "IP Address", "Netmask",
- "Gateway" };
+ private static final String[] NETWORK_INTERFACE_TABLE_COLUMN_NAMES = { "Interface", "Model", "Speed", "IP Address",
+ "Netmask", "Gateway" };
private static final GUIHelper guiHelper = GUIHelper.getInstance();
private void createServerSummarySection(GlusterServer server, FormToolkit toolkit, final ScrolledForm form) {
Composite section = guiHelper.createSection(form, toolkit, "Summary", null, 2, false);
-// toolkit.createLabel(section, "Preferred Network: ", SWT.NONE);
-// toolkit.createLabel(section, server.getPreferredNetworkInterface().getName(), SWT.NONE);
+ // toolkit.createLabel(section, "Preferred Network: ", SWT.NONE);
+ // toolkit.createLabel(section, server.getPreferredNetworkInterface().getName(), SWT.NONE);
boolean online = server.getStatus() == SERVER_STATUS.ONLINE;
@@ -168,6 +168,8 @@ public class GlusterServerTabCreator implements TabCreator {
parent.setLayout(tableColumnLayout);
setColumnProperties(table, NETWORK_INTERFACE_TABLE_COLUMN_INDICES.INTERFACE, SWT.CENTER, 70);
+ setColumnProperties(table, NETWORK_INTERFACE_TABLE_COLUMN_INDICES.MODEL, SWT.CENTER, 70);
+ setColumnProperties(table, NETWORK_INTERFACE_TABLE_COLUMN_INDICES.SPEED, SWT.CENTER, 70);
setColumnProperties(table, NETWORK_INTERFACE_TABLE_COLUMN_INDICES.IP_ADDRESS, SWT.CENTER, 100);
setColumnProperties(table, NETWORK_INTERFACE_TABLE_COLUMN_INDICES.NETMASK, SWT.CENTER, 70);
setColumnProperties(table, NETWORK_INTERFACE_TABLE_COLUMN_INDICES.GATEWAY, SWT.CENTER, 70);
@@ -217,19 +219,20 @@ public class GlusterServerTabCreator implements TabCreator {
private Composite createNetworkInterfacesSection(GlusterServer server, FormToolkit toolkit, ScrolledForm form) {
final Composite section = guiHelper.createSection(form, toolkit, "Network Interfaces", null, 1, false);
createNetworkInterfacesTableViewer(createTableViewerComposite(section), server);
-// Hyperlink changePreferredNetworkLink = toolkit.createHyperlink(section, "Change Preferred Network", SWT.NONE);
-// changePreferredNetworkLink.addHyperlinkListener(new HyperlinkAdapter() {
-//
-// @Override
-// public void linkActivated(HyperlinkEvent e) {
-// new MessageDialog(
-// section.getShell(),
-// "Gluster Storage Platform",
-// guiHelper.getImage(IImageKeys.SERVER),
-// "This will show additional controls to help user choose a new network interface. TO BE IMPLEMENTED.",
-// MessageDialog.INFORMATION, new String[] { "OK" }, 0).open();
-// }
-// });
+ // Hyperlink changePreferredNetworkLink = toolkit.createHyperlink(section, "Change Preferred Network",
+ // SWT.NONE);
+ // changePreferredNetworkLink.addHyperlinkListener(new HyperlinkAdapter() {
+ //
+ // @Override
+ // public void linkActivated(HyperlinkEvent e) {
+ // new MessageDialog(
+ // section.getShell(),
+ // "Gluster Storage Platform",
+ // guiHelper.getImage(IImageKeys.SERVER),
+ // "This will show additional controls to help user choose a new network interface. TO BE IMPLEMENTED.",
+ // MessageDialog.INFORMATION, new String[] { "OK" }, 0).open();
+ // }
+ // });
return section;
}
@@ -241,7 +244,8 @@ public class GlusterServerTabCreator implements TabCreator {
serverLogsTab.layout(); // IMP: lays out the form properly
}
- private void createServerDisksTab(GlusterServer server, TabFolder tabFolder, FormToolkit toolkit, IWorkbenchSite site) {
+ private void createServerDisksTab(GlusterServer server, TabFolder tabFolder, FormToolkit toolkit,
+ IWorkbenchSite site) {
Composite serverDisksTab = guiHelper.createTab(tabFolder, "Disks", IImageKeys.SERVER);
ServerDisksPage page = new ServerDisksPage(serverDisksTab, SWT.NONE, site, server.getDisks());
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 0c91a02b..8c7f54ae 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
@@ -20,17 +20,22 @@
*/
package com.gluster.storage.management.server.resources;
-import com.gluster.storage.management.core.model.Disk;
+import com.gluster.storage.management.core.exceptions.GlusterRuntimeException;
import com.gluster.storage.management.core.model.Server;
-import com.gluster.storage.management.core.response.GenericResponse;
+import com.gluster.storage.management.core.model.Status;
+import com.gluster.storage.management.server.utils.GlusterUtil;
+import com.gluster.storage.management.server.utils.ServerUtil;
+import com.sun.jersey.api.core.InjectParam;
/**
* 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;
+ @InjectParam
+ private ServerUtil serverUtil;
+
+ @InjectParam
+ private GlusterUtil glusterUtil;
/**
* Fetch details of the given server. The server name must be populated in the object before calling this method.
@@ -38,43 +43,20 @@ public class AbstractServersResource {
* @param server
* Server whose details are to be fetched
*/
-
-
-
-// public Server getServerDetails(String serverName) {
-//
-// }
-
-
-
- /**
- * @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));
+ protected void 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) {
+ throw new GlusterRuntimeException(((Status)response).getMessage());
+ }
+ server.copyFrom((Server) response); // Update the details in <Server> object
}
-// 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"));
-// }
-// }
+ protected void setGlusterUtil(GlusterUtil glusterUtil) {
+ this.glusterUtil = glusterUtil;
+ }
- /**
- * @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));
+ protected GlusterUtil getGlusterUtil() {
+ return glusterUtil;
}
}
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 189e75f9..eba06bf5 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
@@ -30,6 +30,7 @@ import javax.ws.rs.core.MediaType;
import org.springframework.stereotype.Component;
+import com.gluster.storage.management.core.constants.CoreConstants;
import com.gluster.storage.management.core.model.Response;
import com.gluster.storage.management.core.model.Server;
import com.gluster.storage.management.core.model.Status;
@@ -46,16 +47,15 @@ import com.sun.jersey.spi.resource.Singleton;
public class DiscoveredServersResource extends AbstractServersResource {
private List<String> discoveredServerNames = new ArrayList<String>();
- @InjectParam
- private static ServerUtil serverUtil;
-
public List<String> getDiscoveredServerNames() {
return discoveredServerNames;
}
+
@GET
@Produces(MediaType.TEXT_XML)
- public Object getDiscoveredServers(@QueryParam("details") Boolean getDetails) {
+ @SuppressWarnings("rawtypes")
+ public Response getDiscoveredServers(@QueryParam("details") Boolean getDetails) {
if(getDetails != null && getDetails == true) {
return getDiscoveredServerDetails();
}
@@ -65,15 +65,27 @@ public class DiscoveredServersResource extends AbstractServersResource {
private ServerListResponse getDiscoveredServerDetails() {
List<Server> discoveredServers = new ArrayList<Server>();
List<String> serverNames = getDiscoveredServerNames();
- GenericResponse<Server> discoveredServer;
+ GenericResponse<Server> discoveredServerResponse;
+ int errCount = 0;
+ StringBuilder errMsg = new StringBuilder("Couldn't fetch details for server(s): ");
for (String serverName : serverNames) {
- discoveredServer = getDiscoveredServer(serverName);
- if (!discoveredServer.getStatus().isSuccess()) {
- return new ServerListResponse(discoveredServer.getStatus(), discoveredServers);
+ discoveredServerResponse = getDiscoveredServer(serverName);
+ if (!discoveredServerResponse.getStatus().isSuccess()) {
+ errMsg.append(CoreConstants.NEWLINE + serverName + " : " + discoveredServerResponse.getStatus());
+ errCount++;
+ } else {
+ discoveredServers.add(discoveredServerResponse.getData());
}
- discoveredServers.add(discoveredServer.getData());
}
- return new ServerListResponse(Status.STATUS_SUCCESS, discoveredServers);
+ Status status = null;
+ if(errCount == 0) {
+ status = new Status(Status.STATUS_CODE_SUCCESS, "Success");
+ } else if(errCount == serverNames.size()) {
+ status = new Status(Status.STATUS_CODE_FAILURE, errMsg.toString());
+ } else {
+ status = new Status(Status.STATUS_CODE_PART_SUCCESS, errMsg.toString());
+ }
+ return new ServerListResponse(status, discoveredServers);
}
public void setDiscoveredServerNames(List<String> discoveredServerNames) {
@@ -87,20 +99,14 @@ public class DiscoveredServersResource extends AbstractServersResource {
@Produces(MediaType.TEXT_XML)
public GenericResponse<Server> getDiscoveredServer(@PathParam("serverName") String serverName) {
Server server = new Server(serverName);
- 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);
+ try {
+ fetchServerDetails(server);
+ } catch (Exception e) {
+ return new GenericResponse<Server>(new Status(e), null);
}
- server.copyFrom((Server) response); // Update the details in <Server> object
- return new GenericResponse<Server>( Status.STATUS_SUCCESS, (Server) response);
+ return new GenericResponse<Server>(Status.STATUS_SUCCESS, server);
}
-
public static void main(String[] args) {
StringListResponse listResponse = (StringListResponse)new DiscoveredServersResource().getDiscoveredServers(false);
for (String server : listResponse.getData()) {
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 d01b4d3d..71c0f7db 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
@@ -32,55 +32,48 @@ import javax.ws.rs.core.MediaType;
import org.springframework.stereotype.Component;
+import com.gluster.storage.management.core.constants.CoreConstants;
import com.gluster.storage.management.core.constants.RESTConstants;
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;
@Component
@Singleton
@Path("/cluster/servers")
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) {
- this.glusterUtil = glusterUtil;
- }
-
- public GlusterUtil getGlusterUtil() {
- return glusterUtil;
- }
-
private GlusterServerListResponse getServerDetails(String knownServer) {
- List<GlusterServer> glusterServers = glusterUtil.getGlusterServers(knownServer);
- GenericResponse<Server> serverResponse;
+ List<GlusterServer> glusterServers = getGlusterUtil().getGlusterServers(knownServer);
+ int errCount = 0;
+ StringBuilder errMsg = new StringBuilder("Couldn't fetch details for server(s): ");
+
for (GlusterServer server : glusterServers) {
if (server.getStatus() == SERVER_STATUS.ONLINE) {
- serverResponse = fetchServerDetails(server);
- if (!serverResponse.getStatus().isSuccess()) {
- return new GlusterServerListResponse(serverResponse.getStatus(), glusterServers);
+ try {
+ fetchServerDetails(server);
+ } catch (Exception e) {
+ errMsg.append(CoreConstants.NEWLINE + server.getName() + " : [" + e.getMessage() + "]");
+ errCount++;
}
}
}
- return new GlusterServerListResponse(Status.STATUS_SUCCESS, glusterServers);
+ Status status;
+ if (errCount==0) {
+ status = new Status(Status.STATUS_CODE_SUCCESS, "Success");
+ } else if(errCount == glusterServers.size()) {
+ status = new Status(Status.STATUS_CODE_FAILURE, errMsg.toString());
+ } else {
+ status = new Status(Status.STATUS_CODE_PART_SUCCESS, errMsg.toString());
+ }
+ return new GlusterServerListResponse(status, glusterServers);
}
@GET
@@ -93,46 +86,38 @@ public class GlusterServersResource extends AbstractServersResource {
@GET
@Path("{serverName}")
@Produces(MediaType.TEXT_XML)
- public GlusterServerResponse getGlusterServer(@PathParam("serverName") String serverName) {
- // TODO: Implement logic to fetch details of a single gluster server (peer)
- GlusterServer server = new GlusterServer(serverName);
- GenericResponse<Server> serverResponse = fetchServerDetails(server);
- return new GlusterServerResponse(serverResponse.getStatus(), (GlusterServer) serverResponse.getData());
- }
-
- /*
- * (non-Javadoc)
- *
- * @see
- * com.gluster.storage.management.server.resources.AbstractServersResource#fetchServerDetails(com.gluster.storage
- * .management.core.model.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);
+ public GlusterServerResponse getGlusterServer(
+ @QueryParam(RESTConstants.QUERY_PARAM_KNOWN_SERVER) String knownServer,
+ @PathParam("serverName") String serverName) {
+ GlusterServer server = getGlusterUtil().getGlusterServer(knownServer, serverName);
+ Status status = Status.STATUS_SUCCESS;
+ if(server.isOnline()) {
+ try {
+ fetchServerDetails(server);
+ } catch (Exception e) {
+ status.setCode(Status.STATUS_CODE_FAILURE);
+ }
}
- server.copyFrom((Server) response); // Update the details in <Server> object
- return new GenericResponse<Server>(Status.STATUS_SUCCESS, (Server) response);
+ return new GlusterServerResponse(status, server);
}
@POST
@Produces(MediaType.TEXT_XML)
public GlusterServerResponse addServer(@FormParam("serverName") String serverName,
@FormParam("existingServer") String existingServer) {
- Status status = glusterUtil.addServer(serverName, existingServer);
+ Status status = getGlusterUtil().addServer(serverName, existingServer);
if (!status.isSuccess()) {
return new GlusterServerResponse(status, null);
}
- return new GlusterServerResponse(Status.STATUS_SUCCESS, getGlusterServer(serverName).getGlusterServer());
+ return new GlusterServerResponse(Status.STATUS_SUCCESS, getGlusterServer(existingServer, serverName)
+ .getGlusterServer());
}
@DELETE
@Produces(MediaType.TEXT_XML)
public Status removeServer(@QueryParam("serverName") String serverName) {
- return glusterUtil.removeServer(serverName);
+ return getGlusterUtil().removeServer(serverName);
}
public static void main(String[] args) {
diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/GlusterUtil.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/GlusterUtil.java
index 13b8ef28..bc75a8ce 100644
--- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/GlusterUtil.java
+++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/GlusterUtil.java
@@ -92,6 +92,24 @@ public class GlusterUtil {
return null;
}
+ private GlusterServer getKnownServer(String knownServer) {
+ GlusterServer server = new GlusterServer(knownServer);
+ server.setStatus(SERVER_STATUS.ONLINE); //TODO: If pingable
+ //NOTE: No UUID assumed, it can be fetch while getting server details
+ return server;
+ }
+
+
+ public GlusterServer getGlusterServer(String knownServer, String serverName) {
+ List<GlusterServer> servers = getGlusterServers(knownServer);
+ for(GlusterServer server : servers) {
+ if(server.getName().equals(serverName)) {
+ return server;
+ }
+ }
+ return null;
+ }
+
public List<GlusterServer> getGlusterServers(String knownServer) {
String output = getPeerStatus(knownServer);
if (output == null) {
@@ -99,6 +117,7 @@ public class GlusterUtil {
}
List<GlusterServer> glusterServers = new ArrayList<GlusterServer>();
+ glusterServers.add(getKnownServer(knownServer)); // Append the known server
GlusterServer server = null;
boolean foundHost = false;
boolean foundUuid = false;
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 23a8169d..5b953c3d 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,7 +49,7 @@ import com.gluster.storage.management.core.utils.ProcessUtil;
public class ServerUtil {
@Autowired
ServletContext servletContext;
-
+
@Autowired
private SshUtil sshUtil;
@@ -87,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);
@@ -105,13 +105,13 @@ System.out.println(output);
private String executeOnServer(String serverName, String commandWithArgs) {
ProcessResult result = sshUtil.executeRemote(serverName, commandWithArgs);
- if(!result.isSuccess()) {
+ 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) {
@@ -148,9 +148,9 @@ System.out.println(output);
// throw new GlusterRuntimeException("Error during remote execution: [" + e.getMessage() + "]");
// }
// }
-
+
public String getFileFromServer(String serverName, String fileName) {
- return executeOnServer(serverName, "get_file " + fileName);
+ return executeOnServer(serverName, "get_file " + fileName);
}
/**
@@ -174,27 +174,30 @@ System.out.println(output);
Unmarshaller um = context.createUnmarshaller();
return um.unmarshal(new ByteArrayInputStream(input.getBytes()));
} catch (JAXBException e) {
- if(tryGenericResponseOnFailure) {
+ if (tryGenericResponseOnFailure) {
// unmarshalling failed. try to unmarshal a GenericResponse object
return unmarshal(GenericResponse.class, input, false);
}
-
+
return new Status(Status.STATUS_CODE_FAILURE, "Error during unmarshalling string [" + input
+ "] for class [" + expectedClass.getName() + ": [" + e.getMessage() + "]");
}
}
- public static void main(String args[]) throws Exception {
- // CreateVolumeExportDirectory.py md0 testvol
- System.out.println(new ServerUtil().getFileFromServer("localhost", "/tmp/python/PeerAgent.py"));
- }
-
/**
- * @param serverName Server on which the directory is present
- * @param brickDir Directory whose disk is to be fetched
+ * @param serverName
+ * Server on which the directory is present
+ * @param brickDir
+ * Directory whose disk is to be fetched
* @return Status object containing the disk name, or error message in case the remote script fails.
*/
public Status getDiskForDir(String serverName, String brickDir) {
return (Status) executeOnServer(true, serverName, REMOTE_SCRIPT_GET_DISK_FOR_DIR + " " + brickDir, Status.class);
}
+
+ public static void main(String args[]) throws Exception {
+ // CreateVolumeExportDirectory.py md0 testvol
+ System.out.println(new ServerUtil().getFileFromServer("localhost", "/tmp/python/PeerAgent.py"));
+ }
+
}