/*******************************************************************************
* Copyright (c) 2006-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 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see
* <http://www.gnu.org/licenses/>.
*******************************************************************************/
package org.gluster.storage.management.core.model;
import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name="cluster")
public class Cluster extends Entity {
List<GlusterServer> servers = new ArrayList<GlusterServer>();
List<Server> discoveredServers = new ArrayList<Server>();
List<Volume> volumes = new ArrayList<Volume>();
List<TaskInfo> taskInfoList = new ArrayList<TaskInfo>();
List<Alert> alerts = new ArrayList<Alert>();
ServerStats aggregatedCpuStats;
ServerStats aggregatedNetworkStats;
public Cluster() {
}
public List<GlusterServer> getServers() {
return servers;
}
public void addServer(GlusterServer server) {
servers.add(server);
}
public void removeServer(GlusterServer server) {
servers.remove(server);
}
public void addDiscoveredServer(Server server) {
discoveredServers.add(server);
}
public void removeDiscoveredServer(Server server) {
discoveredServers.remove(server);
}
public void deleteVolume(Volume volume) {
volumes.remove(volume);
}
public void setServers(List<GlusterServer> servers) {
this.servers = servers;
children.add(new EntityGroup<GlusterServer>("Servers", GlusterServer.class, this, servers));
}
public List<Server> getAutoDiscoveredServers() {
return discoveredServers;
}
public void setAutoDiscoveredServers(List<Server> autoDiscoveredServers) {
this.discoveredServers = autoDiscoveredServers;
children.add(new EntityGroup<Server>("Discovered Servers", Server.class, this, autoDiscoveredServers));
}
@SuppressWarnings({ "unchecked", "rawtypes" })
public <T extends Entity> EntityGroup<T> getEntityGroup(Class<T> type) {
for(Entity entity : getChildren()) {
if(entity instanceof EntityGroup && ((EntityGroup)entity).getEntityType() == type) {
return (EntityGroup<T>)entity;
}
}
return null;
}
public List<Volume> getVolumes() {
return volumes;
}
public void setVolumes(List<Volume> volumes) {
this.volumes = volumes;
children.add(new EntityGroup<Volume>("Volumes", Volume.class, this, volumes));
}
public void addVolume(Volume volume) {
this.volumes.add(volume);
}
public void updateVolume(String volumeName, List<Brick> bricks) {
Volume volume = getVolume(volumeName);
volume.setBricks(bricks);
}
public Cluster(String name, Entity parent) {
super(name, parent);
}
public Cluster(String name, Entity parent, List<GlusterServer> servers, List<Volume> volumes) {
super(name, parent);
setServers(servers);
setVolumes(volumes);
}
public List<TaskInfo> getTaskInfoList() {
return taskInfoList;
}
public void setTaskInfoList(List<TaskInfo> taskInfoList) {
this.taskInfoList = taskInfoList;
}
public void addTaskInfo(TaskInfo taskInfo) {
this.taskInfoList.add(taskInfo);
}
public void removeTaskInfo(TaskInfo taskInfo) {
this.taskInfoList.remove(taskInfo);
}
public List<Alert> getAlerts() {
return alerts;
}
public void setAlerts(List<Alert> alerts) {
this.alerts = alerts;
}
public void addAlert(Alert alert) {
this.alerts.add(alert);
}
public void removeAlert(Alert alert) {
this.alerts.remove(alert);
}
public double getTotalDiskSpace() {
double totalDiskSpace = 0;
for(GlusterServer server : getServers()) {
totalDiskSpace += server.getTotalDiskSpace();
}
return totalDiskSpace;
}
public double getDiskSpaceInUse() {
double diskSpaceInUse = 0;
for(GlusterServer server : getServers()) {
diskSpaceInUse += server.getDiskSpaceInUse();
}
return diskSpaceInUse;
}
public GlusterServer getServer(String serverName) {
for(GlusterServer server : servers) {
if (server.getName().equalsIgnoreCase(serverName) || server.getIpAddressesAsString().contains(serverName)) {
return server;
}
}
return null;
}
public Volume getVolume(String volumeName) {
for (Volume volume : getVolumes() ) {
if (volume.getName().equals(volumeName)) {
return volume;
}
}
return null;
}
public ServerStats getAggregatedCpuStats() {
return aggregatedCpuStats;
}
public void setAggregatedCpuStats(ServerStats aggregatedCpuStats) {
this.aggregatedCpuStats = aggregatedCpuStats;
}
public ServerStats getAggregatedNetworkStats() {
return aggregatedNetworkStats;
}
public void setAggregatedNetworkStats(ServerStats aggregatedNetworkStats) {
this.aggregatedNetworkStats = aggregatedNetworkStats;
}
}