From 3e997efcd1f569d38b1ac7623c4e10dd35da416a Mon Sep 17 00:00:00 2001 From: Selvam Date: Wed, 30 Mar 2011 18:02:08 +0530 Subject: Alerts section in volumes summary page Volumes update in navigation tree Review comments update for Alerts & Running tasks 1. RESOURCE_NAME removed and used RESTConstants 2. fetchAlerts renamed to fetchAllAlerts 3. System.out.println removed 4. ALERT_TYPE_STR made as static and final 5. getAlertDescription renamed as getMessage 6. getTaskDescription renamed as getTaskInfo 7. getCluster method is added in GlusterDataModel 8. getRunningTasksForVolumesContext will not implemented for Volumes summary view 9. Constants added for "Availability", "Running Tasks" etc. 10. CPU_USAGE_ALERT, MEMORY_USAGE_ALERT and DISK_USAGE_ALERT are modifies and OFFLINE_VOLUME_DISKS_ALERT, OFFLINE_SERVERS_ALERT are added. 11. Two more dummy alerts added 12. Reference format changed for Disk as "volumeName:serverName:diskName" 13. TaskInfo reflects the task type 14. Method removeSpaces added as static method 15. Local constants added for package and Manager --- .../management/core/constants/RESTConstants.java | 1 + .../storage/management/core/model/Alert.java | 51 +++++++ .../management/core/model/AlertListResponse.java | 36 +++++ .../storage/management/core/model/AlertStatus.java | 13 ++ .../storage/management/core/model/Cluster.java | 13 ++ .../management/core/model/GlusterDataModel.java | 4 + .../management/core/model/GlusterDummyModel.java | 60 +++++--- .../storage/management/core/model/RunningTask.java | 30 ++-- .../storage/management/core/model/Status.java | 2 + .../storage/management/core/model/Volume.java | 38 +++-- .../management/core/model/VolumeListResponse.java | 43 ++++++ .../storage/management/core/utils/GlusterUtil.java | 159 ++++++++++++++++----- .../storage/management/core/utils/StringUtil.java | 4 + 13 files changed, 377 insertions(+), 77 deletions(-) create mode 100644 src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Alert.java create mode 100644 src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/AlertListResponse.java create mode 100644 src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/AlertStatus.java create mode 100644 src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/VolumeListResponse.java (limited to 'src/com.gluster.storage.management.core') diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/constants/RESTConstants.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/constants/RESTConstants.java index fb40be8a..47697eb9 100644 --- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/constants/RESTConstants.java +++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/constants/RESTConstants.java @@ -34,4 +34,5 @@ public class RESTConstants { // Running tasks resource public static final String RESOURCE_PATH_RUNNING_TASKS = "/cluster/runningtasks"; + public static final String RESOURCE_PATH_ALERTS = "/cluster/alerts"; } diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Alert.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Alert.java new file mode 100644 index 00000000..947867c9 --- /dev/null +++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Alert.java @@ -0,0 +1,51 @@ +package com.gluster.storage.management.core.model; + +import javax.xml.bind.annotation.XmlRootElement; + +@XmlRootElement(name = "alert") +public class Alert { + public enum ALERT_TYPES { CPU_USAGE_ALERT, MEMORY_USAGE_ALERT, DISK_USAGE_ALERT, OFFLINE_VOLUME_DISKS_ALERT, OFFLINE_SERVERS_ALERT }; + + public static final String[] ALERT_TYPE_STR = {"High CPU Usage", "High Memory Usage", "Low Disk Space", "Offline Disks", "Offline Servers" }; + + protected String id; + protected ALERT_TYPES type; + protected String reference; + protected String message; + + public String getAlertType( ALERT_TYPES alertType) { + return ALERT_TYPE_STR[alertType.ordinal()]; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public ALERT_TYPES getType() { + return type; + } + + public void setType(ALERT_TYPES type) { + this.type = type; + } + + public String getReference() { + return reference; + } + + public void setReference(String reference) { + this.reference = reference; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } +} diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/AlertListResponse.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/AlertListResponse.java new file mode 100644 index 00000000..bb3c754e --- /dev/null +++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/AlertListResponse.java @@ -0,0 +1,36 @@ +package com.gluster.storage.management.core.model; + +import java.util.ArrayList; +import java.util.List; + +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlElementWrapper; +import javax.xml.bind.annotation.XmlRootElement; + +@XmlRootElement(name = "response") +public class AlertListResponse extends AbstractResponse { + private List alerts = new ArrayList(); + + public AlertListResponse() { + + } + + public AlertListResponse(List alerts) { + setAlerts(alerts); + } + + public void setAlerts(List alerts) { + this.alerts = alerts; + } + + @XmlElementWrapper(name = "alerts") + @XmlElement(name = "alert", type=Alert.class) + public List getAlerts() { + return this.alerts; + } + + @Override + public Object getData() { + return getAlerts(); + } +} diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/AlertStatus.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/AlertStatus.java new file mode 100644 index 00000000..8c563f49 --- /dev/null +++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/AlertStatus.java @@ -0,0 +1,13 @@ +package com.gluster.storage.management.core.model; + +public class AlertStatus { + protected String description; + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } +} diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Cluster.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Cluster.java index 65d5ebea..1af57266 100644 --- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Cluster.java +++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Cluster.java @@ -29,6 +29,7 @@ public class Cluster extends Entity { List discoveredServers = new ArrayList(); List volumes = new ArrayList(); List runningTasks = new ArrayList(); + List alerts = new ArrayList(); public Cluster() { } @@ -97,4 +98,16 @@ public class Cluster extends Entity { public void setRunningTasks(List runningTasks) { this.runningTasks = runningTasks; } + + public List getAlerts() { + return alerts; + } + + public void setAlerts(List alerts) { + this.alerts = alerts; + } + + public void addAlert(Alert alert) { + this.alerts.add(alert); + } } \ No newline at end of file diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/GlusterDataModel.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/GlusterDataModel.java index 612cae31..733527c3 100644 --- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/GlusterDataModel.java +++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/GlusterDataModel.java @@ -39,4 +39,8 @@ public class GlusterDataModel extends Entity { public void addCluster(Cluster cluster) { children.add(cluster); } + + public Cluster getCluster() { + return (Cluster) children.get(0); + } } diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/GlusterDummyModel.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/GlusterDummyModel.java index 11d31553..f25999f0 100644 --- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/GlusterDummyModel.java +++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/GlusterDummyModel.java @@ -174,24 +174,24 @@ public class GlusterDummyModel { } private void addDisksToVolumes() { - volume1.addDisk(s1da); + volume1.addDisk("server1:sda"); - volume2.addDisk(s2da); - volume2.addDisk(s1db); - volume2.addDisk(s3da); - volume2.addDisk(s4da); + volume2.addDisk("server2:sda"); + volume2.addDisk("server1:sdb"); + volume2.addDisk("server3:sda"); + volume2.addDisk("server4:sda"); - volume3.addDisk(s2db); - volume3.addDisk(s4da); - volume3.addDisk(s5da); + volume3.addDisk("server2:sdb"); + volume3.addDisk("server4:sda"); + volume3.addDisk("server5:sda"); - volume4.addDisk(s1da); - volume4.addDisk(s3da); - volume4.addDisk(s4da); - volume4.addDisk(s5db); + volume4.addDisk("server1:sda"); + volume4.addDisk("server3:sda"); + volume4.addDisk("server4:sda"); + volume4.addDisk("server5:sdb"); - volume5.addDisk(s2da); - volume5.addDisk(s5db); + volume5.addDisk("server2:sda"); + volume5.addDisk("server5:sdb"); } private void initializeGlusterServers(Cluster cluster) { @@ -245,15 +245,35 @@ public class GlusterDummyModel { public static List getDummyLogMessages() { return logMessages; } - + + public Disk getVolumeDisk(String volumeDisk) { + List allDisks = getReadyDisksOfAllServers(); + String brickInfo[] = volumeDisk.split(":"); + for( Disk disk: allDisks) { + if (disk.getServerName() == brickInfo[0] && disk.getName() == brickInfo[1]) { + return disk; + } + } + return null; + } + public List getReadyDisksOfVolume(Volume volume) { - List disks = new ArrayList(); - for (Disk disk : volume.getDisks()) { - if (disk.isReady()) { - disks.add(disk); +// List disks = new ArrayList(); +// for (Disk disk : volume.getDisks()) { +// if (disk.isReady()) { +// disks.add(disk); +// } +// } +// return disks; + Disk disk = null; + List volumeDisks = new ArrayList(); + for (String volumeDisk : volume.getDisks() ) { + disk = getVolumeDisk(volumeDisk); + if (disk != null && disk.isReady()) { + volumeDisks.add(disk); } } - return disks; + return volumeDisks; } public List getReadyDisksOfAllVolumes() { diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/RunningTask.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/RunningTask.java index 1a9d63f6..9787f1ee 100644 --- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/RunningTask.java +++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/RunningTask.java @@ -22,17 +22,23 @@ import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement public class RunningTask { - + public enum TASK_TYPES { FORMAT_DISK, MIGRATE_DISK, VOLUME_REBALANCE }; + public String[] TASK_TYPE_STR = {"Formating Disk", "Migrating Disk", "Volume Rebalance"}; + protected String id; - protected String type; // FormatDisk, MigrateDisk, VolumeRebalance - protected Object reference; - protected String description; + protected TASK_TYPES type; // FormatDisk, MigrateDisk, VolumeRebalance + protected String reference; // Server: Server name, Volume: Volume name, Disk: disk name referred as "VolumeName:ServerName:DiskName" + protected String taskInfo; protected RunningTaskStatus status; // TODO redefine public RunningTask() { } + public String getTaskType(TASK_TYPES type) { + return TASK_TYPE_STR[type.ordinal()]; + } + public String getId() { return id; } @@ -41,28 +47,28 @@ public class RunningTask { this.id = id; } - public String getType() { + public TASK_TYPES getType() { return type; } - public void setType(String type) { + public void setType(TASK_TYPES type) { this.type = type; } - public Object getReference() { + public String getReference() { return reference; } - public void setReference(Object reference) { + public void setReference(String reference) { this.reference = reference; } - public String getDescription() { - return description; + public String getTaskInfo() { + return taskInfo; } - public void setDescription(String description) { - this.description = description; + public void setTaskInfo(String taskInfo) { + this.taskInfo = taskInfo; } public RunningTaskStatus getStatus() { diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Status.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Status.java index 06d6efe1..c5fdb246 100644 --- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Status.java +++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Status.java @@ -27,6 +27,8 @@ public class Status { public static final int STATUS_CODE_SUCCESS = 0; public static final int STATUS_CODE_FAILURE = 1; public static final int STATUS_CODE_RUNNING = 2; + public static final int STATUS_CODE_PAUSE = 3; + public static final int STATUS_CODE_WARNING = 4; public static final Status STATUS_SUCCESS = new Status(STATUS_CODE_SUCCESS, "Success"); public static final Status STATUS_FAILURE = new Status(STATUS_CODE_FAILURE, "Failure"); diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Volume.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Volume.java index a7e498c4..2322fa84 100644 --- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Volume.java +++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Volume.java @@ -65,7 +65,7 @@ public class Volume extends Entity { private Map options = new LinkedHashMap(); private double totalDiskSpace = 0; - private List disks = new ArrayList(); + private List disks = new ArrayList(); public Volume() { } @@ -102,6 +102,17 @@ public class Volume extends Entity { public void setVolumeType(VOLUME_TYPE volumeType) { this.volumeType = volumeType; + // TODO find a way to get the replica / strip count + if (volumeType == VOLUME_TYPE.DISTRIBUTED_STRIPE) { + setReplicaCount(0); + setStripeCount(3); + } else if(volumeType == VOLUME_TYPE.DISTRIBUTED_MIRROR) { + setReplicaCount(2); + setStripeCount(0); + } else{ + setReplicaCount(0); + setStripeCount(0); + } } public TRANSPORT_TYPE getTransportType() { @@ -186,26 +197,27 @@ public class Volume extends Entity { return totalDiskSpace; } - public List getDisks() { + public List getDisks() { return disks; } - public void addDisk(Disk disk) { - if (disks.add(disk) && disk.getStatus() != DISK_STATUS.OFFLINE) { - totalDiskSpace += disk.getSpace(); - } + public void addDisk(String disk) { +// if (disks.add(disk) && disk.getStatus() != DISK_STATUS.OFFLINE) { +// totalDiskSpace += disk.getSpace(); +// } + disks.add(disk); } - public void addDisks(List disks) { - for (Disk disk : disks) { + public void addDisks(List disks) { + for (String disk : disks) { addDisk(disk); } } - public void removeDisk(Disk disk) { - if (disks.remove(disk)) { - totalDiskSpace -= disk.getSpace(); - } + public void removeDisk(String disk) { +// if (disks.remove(disk)) { +// totalDiskSpace -= disk.getSpace(); +// } } public void removeAllDisks() { @@ -213,7 +225,7 @@ public class Volume extends Entity { totalDiskSpace = 0; } - public void setDisks(List disks) { + public void setDisks(List disks) { removeAllDisks(); addDisks(disks); } diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/VolumeListResponse.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/VolumeListResponse.java new file mode 100644 index 00000000..7ff98d22 --- /dev/null +++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/VolumeListResponse.java @@ -0,0 +1,43 @@ +package com.gluster.storage.management.core.model; + +import java.util.ArrayList; +import java.util.List; + +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlElementWrapper; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlTransient; + +@XmlRootElement(name = "response") +public class VolumeListResponse extends AbstractResponse { + private List volumes = new ArrayList(); + + public VolumeListResponse() { + + } + + public VolumeListResponse(Status status, List volumes) { + setStatus(status); + setVolumes(volumes); + } + + @XmlElementWrapper(name = "volumes") + @XmlElement(name = "volume", type = Volume.class) + public List getVolumes() { + return this.volumes; + } + + /** + * @param volumes + * volumes to set + */ + public void setVolumes(List volumes) { + this.volumes = volumes; + } + + @Override + @XmlTransient + public Object getData() { + return this.volumes; + } +} diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/utils/GlusterUtil.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/utils/GlusterUtil.java index ad5b4c2b..0e2b0b8d 100644 --- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/utils/GlusterUtil.java +++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/utils/GlusterUtil.java @@ -30,6 +30,7 @@ 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.Volume; import com.gluster.storage.management.core.model.Volume.TRANSPORT_TYPE; +import com.gluster.storage.management.core.model.Volume.VOLUME_STATUS; import com.gluster.storage.management.core.model.Volume.VOLUME_TYPE; /** @@ -40,11 +41,21 @@ public class GlusterUtil { private static final String UUID_PFX = "Uuid:"; private static final String STATE_PFX = "State:"; private static final String GLUSTER_SERVER_STATUS_ONLINE = "Connected"; + + private static final String VOLUME_NAME_PFX = "Volume Name:"; + private static final String VOLUME_TYPE_PFX = "Type:"; + private static final String VOLUME_STATUS_PFX = "Status:"; + private static final String VOLUME_TRANSPORT_TYPE_PFX = "Transport-type:"; + private static final String VOLUME_BRICKS_GROUP_PFX = "Bricks"; // Colon not used + private static final String VOLUME_OPTIONS_RECONFIG_PFX = "Options Reconfigured"; + private static final String VOLUME_OPTIONS_AUTH_ALLOW = "auth.allow:"; + private static final ProcessUtil processUtil = new ProcessUtil(); /** - * Extract value of given token from given line. It is assumed that the token, if present, will be of the following - * form: token: value + * Extract value of given token from given line. It is assumed that the + * token, if present, will be of the following form: + * token: value * * @param line * Line to be analyzed @@ -74,11 +85,13 @@ public class GlusterUtil { // Host and UUID is found, we should look for state String state = extractToken(line, STATE_PFX); if (state != null) { - server.setStatus(state.contains(GLUSTER_SERVER_STATUS_ONLINE) ? SERVER_STATUS.ONLINE + server.setStatus(state + .contains(GLUSTER_SERVER_STATUS_ONLINE) ? SERVER_STATUS.ONLINE : SERVER_STATUS.OFFLINE); - // Completed populating current server. Add it to the list and reset all related variables. + // Completed populating current server. Add it to the list + // and reset all related variables. glusterServers.add(server); - + foundHost = false; foundUuid = false; server = null; @@ -107,11 +120,11 @@ public class GlusterUtil { } public List getGlusterServerNames() { - String output = getPeerStatus(); - if(output == null) { + String output = getPeerStatus(); + if (output == null) { return null; } - + List glusterServerNames = new ArrayList(); for (String line : output.split(CoreConstants.NEWLINE)) { String hostName = extractToken(line, HOSTNAME_PFX); @@ -124,7 +137,8 @@ public class GlusterUtil { private String getPeerStatus() { String output; - ProcessResult result = processUtil.executeCommand("gluster", "peer", "status"); + ProcessResult result = processUtil.executeCommand("gluster", "peer", + "status"); if (!result.isSuccess()) { output = null; } @@ -133,55 +147,59 @@ public class GlusterUtil { } public ProcessResult addServer(String serverName) { - return processUtil.executeCommand("gluster", "peer", "probe", serverName); + return processUtil.executeCommand("gluster", "peer", "probe", + serverName); } - public ProcessResult startVolume(String volumeName) { - return processUtil.executeCommand("gluster", "volume", "start", volumeName); + return processUtil.executeCommand("gluster", "volume", "start", + volumeName); } public ProcessResult stopVolume(String volumeName) { - return processUtil.executeCommand("gluster", "--mode=script", "volume", "stop", volumeName); + return processUtil.executeCommand("gluster", "--mode=script", "volume", + "stop", volumeName); } public ProcessResult createVolume(Volume volume) { - int count=1; // replica or stripe count + int count = 1; // replica or stripe count String volumeType = null; - VOLUME_TYPE volType = volume.getVolumeType(); - if(volType == VOLUME_TYPE.DISTRIBUTED_MIRROR) { + VOLUME_TYPE volType = volume.getVolumeType(); + if (volType == VOLUME_TYPE.DISTRIBUTED_MIRROR) { volumeType = "replica"; count = 2; - } else if(volType == VOLUME_TYPE.DISTRIBUTED_STRIPE) { + } else if (volType == VOLUME_TYPE.DISTRIBUTED_STRIPE) { volumeType = "stripe"; count = 4; } - + String transportTypeStr = null; TRANSPORT_TYPE transportType = volume.getTransportType(); - transportTypeStr = (transportType == TRANSPORT_TYPE.ETHERNET) ? "tcp" : "rdma"; - + transportTypeStr = (transportType == TRANSPORT_TYPE.ETHERNET) ? "tcp" + : "rdma"; + List command = new ArrayList(); command.add("gluster"); command.add("volume"); command.add("create"); command.add(volume.getName()); - if(volumeType != null) { + if (volumeType != null) { command.add(volumeType); command.add("" + count); } command.add("transport"); command.add(transportTypeStr); - for(Disk disk : volume.getDisks()) { - command.add(getBrickNotation(volume, disk)); + //TODO fix needed modified for error free code + for (String disk : volume.getDisks()) { + command.add(disk); } return processUtil.executeCommand(command); } - + public ProcessResult setOption(List command) { return processUtil.executeCommand(command); } - + public ProcessResult setVolumeAccessControl(Volume volume) { List command = new ArrayList(); command.add("gluster"); @@ -192,27 +210,104 @@ public class GlusterUtil { command.add(volume.getAccessControlList()); return setOption(command); } - + /** * @param disk * @return */ private String getBrickNotation(Volume vol, Disk disk) { - // TODO: Figure out an appropriate directory INSIDE the DISK having given NAME (e.g. sda, sdb, etc) + // TODO: Figure out an appropriate directory INSIDE the DISK having + // given NAME (e.g. sda, sdb, etc) // String dirName = "/export/" + vol.getName() + "/" + disk.getName(); - + // if /export directory is not exist then create the directory boolean exists = (new File("/export")).exists(); - + if (!exists) { processUtil.executeCommand("mkdir", "/export"); } - String dirName = "/export/" + vol.getName() ; + String dirName = "/export/" + vol.getName(); return disk.getServerName() + ":" + dirName; } + + public ProcessResult getVolumeInfo() { + return new ProcessUtil().executeCommand("gluster", "volume", "info"); + } + public List getAllVolumes(String volumeInfoText) { + List volumes = new ArrayList(); + boolean isBricksGroupFound = false; + boolean isOptionReconfigFound = false; + List bricks = new ArrayList(); + Volume volume = null; + + for (String line : volumeInfoText.split(CoreConstants.NEWLINE)) { + if (extractToken(line, VOLUME_NAME_PFX) != null) { + if (volume != null) { + volume.setDisks(bricks); + bricks.clear(); + volumes.add(volume); + } + volume = new Volume(); + volume.setName(extractToken(line, VOLUME_NAME_PFX)); + isBricksGroupFound = isOptionReconfigFound = false; + continue; + } + + if (extractToken(line, VOLUME_TYPE_PFX) != null) { + String volumeType = extractToken(line, VOLUME_TYPE_PFX); + volume.setVolumeType((volumeType == "Distribute") ? VOLUME_TYPE.PLAIN_DISTRIBUTE + : VOLUME_TYPE.DISTRIBUTED_MIRROR); // TODO: for Stripe + continue; + } + + if (extractToken(line, VOLUME_STATUS_PFX) != null) { + volume.setStatus(extractToken(line, VOLUME_STATUS_PFX).equals("Started") ? VOLUME_STATUS.ONLINE : VOLUME_STATUS.OFFLINE); + continue; + } + + if (extractToken(line, VOLUME_TRANSPORT_TYPE_PFX) != null) { + volume.setTransportType((extractToken(line, + VOLUME_TRANSPORT_TYPE_PFX) == "tcp") ? TRANSPORT_TYPE.ETHERNET + : TRANSPORT_TYPE.INFINIBAND); + continue; + } + + if (extractToken(line, VOLUME_BRICKS_GROUP_PFX) != null) { + isBricksGroupFound = true; + continue; + } + + if (isBricksGroupFound) { + if (line.matches("Brick[0-9]+:.*")) { + bricks.add( line.split(":")[2].trim().split("/")[2].trim() ); // line: "Brick1: server1:/export/md0/volume-name" + continue; + } else { + isBricksGroupFound = false; + } + } + + if (extractToken(line, VOLUME_OPTIONS_RECONFIG_PFX) != null) { + isOptionReconfigFound = true; + continue; + } + + if (isOptionReconfigFound) { + if (extractToken(line, VOLUME_OPTIONS_AUTH_ALLOW) != null) { + volume.setAccessControlList( extractToken(line, VOLUME_OPTIONS_AUTH_ALLOW) ); + isOptionReconfigFound = false; + } + } + } + if (volume != null) {// Adding the last volume parsed + volume.setDisks(bricks); + volumes.add(volume); + } + return volumes; + } + public static void main(String args[]) { - List names = new GlusterUtil().getGlusterServerNames(); - System.out.println(names); +// List names = new GlusterUtil().getGlusterServerNames(); +// System.out.println(names); } } diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/utils/StringUtil.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/utils/StringUtil.java index 1c4e6893..45f4c436 100644 --- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/utils/StringUtil.java +++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/utils/StringUtil.java @@ -25,4 +25,8 @@ public class StringUtil { : sourceString.toLowerCase().contains( filterString.toLowerCase()); } + + public static String removeSpaces(String str) { + return str.replaceAll("\\s+", ""); + } } -- cgit