summaryrefslogtreecommitdiffstats
path: root/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/GlusterDataModelManager.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/GlusterDataModelManager.java')
-rw-r--r--src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/GlusterDataModelManager.java42
1 files changed, 42 insertions, 0 deletions
diff --git a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/GlusterDataModelManager.java b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/GlusterDataModelManager.java
index e43bcbae..a6daee79 100644
--- a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/GlusterDataModelManager.java
+++ b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/GlusterDataModelManager.java
@@ -408,6 +408,11 @@ public class GlusterDataModelManager {
public void volumeChanged(Volume oldVolume, Volume newVolume) {
oldVolume.copyFrom(newVolume);
+
+ if (oldVolume.getStatus() != newVolume.getStatus()) {
+ updateVolumeStatusAlert(newVolume, newVolume.getStatus());
+ }
+
for (ClusterListener listener : listeners) {
listener.volumeChanged(oldVolume, new Event(EVENT_TYPE.VOLUME_CHANGED, newVolume));
}
@@ -746,6 +751,7 @@ public class GlusterDataModelManager {
public void updateVolumeStatus(Volume volume, VOLUME_STATUS newStatus) {
volume.setStatus(newStatus);
+ updateVolumeStatusAlert(volume, newStatus);
if(newStatus == VOLUME_STATUS.OFFLINE) {
// mark as bricks also as offline
@@ -762,6 +768,42 @@ public class GlusterDataModelManager {
listener.volumeChanged(volume, new Event(EVENT_TYPE.BRICKS_CHANGED, volume.getBricks()));
}
}
+
+ private void updateVolumeStatusAlert(Volume volume, VOLUME_STATUS newStatus) {
+ Alert alert = null;
+ if (newStatus == VOLUME_STATUS.OFFLINE) {
+ alert = createOfflineVolumeAlert(volume);
+ for (ClusterListener listener : listeners) {
+ listener.alertCreated(alert);
+ }
+ } else {
+ alert = removeOfflineVolumeAlert(volume);
+ for (ClusterListener listener : listeners) {
+ listener.alertRemoved(alert);
+ }
+ }
+ }
+
+ private Alert createOfflineVolumeAlert(Volume volume) {
+ Alert alert = new Alert(ALERT_TYPES.OFFLINE_VOLUME_ALERT, volume.getName(),
+ Alert.ALERT_TYPE_STR[ALERT_TYPES.OFFLINE_VOLUME_ALERT.ordinal()] + " [" + volume.getName() + "]");
+ getModel().getCluster().addAlert(alert);
+ return alert;
+ }
+
+ private Alert removeOfflineVolumeAlert(Volume volume) {
+ List<Alert> clusterAlerts = getModel().getCluster().getAlerts();
+ Alert removedAlert = null;
+ for (Alert alert : clusterAlerts) {
+ if (alert.getType().equals(ALERT_TYPES.OFFLINE_VOLUME_ALERT)
+ && alert.getReference().equals(volume.getName())) {
+ removedAlert = alert;
+ clusterAlerts.remove(alert);
+ break;
+ }
+ }
+ return removedAlert;
+ }
public void resetVolumeOptions(Volume volume) {
volume.getOptions().clear();