You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by mp...@apache.org on 2018/09/12 18:01:54 UTC

[ambari] branch branch-2.7 updated: AMBARI-24611. Disabling an Alert Does Not Clear It in the Web UI. (#2300)

This is an automated email from the ASF dual-hosted git repository.

mpapirkovskyy pushed a commit to branch branch-2.7
in repository https://gitbox.apache.org/repos/asf/ambari.git


The following commit(s) were added to refs/heads/branch-2.7 by this push:
     new 6919dd7  AMBARI-24611. Disabling an Alert Does Not Clear It in the Web UI. (#2300)
6919dd7 is described below

commit 6919dd70f7cc97e695ab2d6c791b3e8562d6878f
Author: Myroslav Papirkovskyi <mp...@apache.org>
AuthorDate: Wed Sep 12 21:01:51 2018 +0300

    AMBARI-24611. Disabling an Alert Does Not Clear It in the Web UI. (#2300)
    
    * AMBARI-24611. Disabling an Alert Does Not Clear It in the Web UI. (mpapirkovskyy)
    
    * AMBARI-24611. Disabling an Alert Does Not Clear It in the Web UI. (mpapirkovskyy)
    
    * AMBARI-24611. Disabling an Alert Does Not Clear It in the Web UI.
---
 .../main/python/ambari_agent/AlertSchedulerHandler.py   |  4 +++-
 .../api/query/render/AlertSummaryGroupedRenderer.java   | 12 ++++++++++++
 .../ambari/server/api/services/AmbariMetaInfo.java      |  3 ++-
 .../internal/AlertDefinitionResourceProvider.java       |  2 +-
 .../server/events/AlertDefinitionDisabledEvent.java     | 17 ++++++++++++++++-
 .../alerts/AlertDefinitionDisabledListener.java         | 15 +++++++++++++++
 .../events/listeners/alerts/AlertReceivedListener.java  |  8 ++++++++
 7 files changed, 57 insertions(+), 4 deletions(-)

diff --git a/ambari-agent/src/main/python/ambari_agent/AlertSchedulerHandler.py b/ambari-agent/src/main/python/ambari_agent/AlertSchedulerHandler.py
index cf2fe2e..f8b09fa 100644
--- a/ambari-agent/src/main/python/ambari_agent/AlertSchedulerHandler.py
+++ b/ambari-agent/src/main/python/ambari_agent/AlertSchedulerHandler.py
@@ -50,7 +50,7 @@ class AlertSchedulerHandler():
   TYPE_RECOVERY = 'RECOVERY'
 
   def __init__(self, initializer_module, in_minutes=True):
-
+    self.initializer_module = initializer_module
     self.cachedir = initializer_module.config.alerts_cachedir
     self.stacks_dir = initializer_module.config.stacks_dir
     self.common_services_dir = initializer_module.config.common_services_dir
@@ -169,6 +169,8 @@ class AlertSchedulerHandler():
     definitions = self.__load_definitions()
     scheduled_jobs = self.__scheduler.get_jobs()
 
+    self.initializer_module.alert_status_reporter.reported_alerts.clear()
+
     # for every scheduled job, see if its UUID is still valid
     for scheduled_job in scheduled_jobs:
       uuid_valid = False
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/api/query/render/AlertSummaryGroupedRenderer.java b/ambari-server/src/main/java/org/apache/ambari/server/api/query/render/AlertSummaryGroupedRenderer.java
index cdfcb67..b1493a6 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/api/query/render/AlertSummaryGroupedRenderer.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/api/query/render/AlertSummaryGroupedRenderer.java
@@ -228,6 +228,18 @@ public class AlertSummaryGroupedRenderer extends AlertSummaryRenderer {
     }
   }
 
+  public static Map<String, AlertDefinitionSummary> generateEmptySummary(Long definitionId, String definitionName) {
+    Map<String, AlertDefinitionSummary> summaries = new HashMap<>();
+
+    AlertDefinitionSummary groupSummaryInfo = new AlertDefinitionSummary();
+    groupSummaryInfo.Id = definitionId;
+    groupSummaryInfo.Name = definitionName;
+
+    summaries.put(definitionName, groupSummaryInfo);
+
+    return summaries;
+  }
+
   /**
    * {@inheritDoc}
    * <p/>
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/api/services/AmbariMetaInfo.java b/ambari-server/src/main/java/org/apache/ambari/server/api/services/AmbariMetaInfo.java
index 712737c..9f0a43b 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/api/services/AmbariMetaInfo.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/api/services/AmbariMetaInfo.java
@@ -1240,7 +1240,8 @@ public class AmbariMetaInfo {
       for (AlertDefinitionEntity definition : definitionsToDisable) {
         definition.setEnabled(false);
         alertDefinitionDao.merge(definition);
-        eventPublisher.publish(new AlertDefinitionDisabledEvent(clusterId, definition.getDefinitionId()));
+        eventPublisher.publish(new AlertDefinitionDisabledEvent(clusterId, definition.getDefinitionId(),
+            definition.getDefinitionName()));
       }
   }
 
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AlertDefinitionResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AlertDefinitionResourceProvider.java
index e789c1b..01f2d5d 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AlertDefinitionResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AlertDefinitionResourceProvider.java
@@ -328,7 +328,7 @@ public class AlertDefinitionResourceProvider extends AbstractControllerResourceP
         // a disabled event
         if (oldEnabled && !entity.getEnabled()) {
           AlertDefinitionDisabledEvent event = new AlertDefinitionDisabledEvent(
-              entity.getClusterId(), entity.getDefinitionId());
+              entity.getClusterId(), entity.getDefinitionId(), entity.getDefinitionName());
 
           eventPublisher.publish(event);
         }
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/events/AlertDefinitionDisabledEvent.java b/ambari-server/src/main/java/org/apache/ambari/server/events/AlertDefinitionDisabledEvent.java
index 810a92a..655c21a 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/events/AlertDefinitionDisabledEvent.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/events/AlertDefinitionDisabledEvent.java
@@ -31,6 +31,11 @@ public class AlertDefinitionDisabledEvent extends ClusterEvent {
   private final long m_definitionId;
 
   /**
+   * The alert definition name.
+   */
+  private final String definitionName;
+
+  /**
    * Constructor.
    *
    * @param clusterId
@@ -38,9 +43,10 @@ public class AlertDefinitionDisabledEvent extends ClusterEvent {
    * @param definitionId
    *          the alert definition being registered.
    */
-  public AlertDefinitionDisabledEvent(long clusterId, long definitionId) {
+  public AlertDefinitionDisabledEvent(long clusterId, long definitionId, String definitionName) {
     super(AmbariEventType.ALERT_DEFINITION_DISABLED, clusterId);
     m_definitionId = definitionId;
+    this.definitionName = definitionName;
   }
 
   /**
@@ -51,4 +57,13 @@ public class AlertDefinitionDisabledEvent extends ClusterEvent {
   public long getDefinitionId() {
     return m_definitionId;
   }
+
+  /**
+   * Gets the definition name.
+   *
+   * @return the definitionId name
+   */
+  public String getDefinitionName() {
+    return definitionName;
+  }
 }
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/alerts/AlertDefinitionDisabledListener.java b/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/alerts/AlertDefinitionDisabledListener.java
index fc6ad19..b6f17e8 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/alerts/AlertDefinitionDisabledListener.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/alerts/AlertDefinitionDisabledListener.java
@@ -17,9 +17,15 @@
  */
 package org.apache.ambari.server.events.listeners.alerts;
 
+import java.util.HashMap;
+import java.util.Map;
+
 import org.apache.ambari.server.EagerSingleton;
+import org.apache.ambari.server.api.query.render.AlertSummaryGroupedRenderer;
 import org.apache.ambari.server.events.AlertDefinitionDisabledEvent;
+import org.apache.ambari.server.events.AlertUpdateEvent;
 import org.apache.ambari.server.events.publishers.AmbariEventPublisher;
+import org.apache.ambari.server.events.publishers.STOMPUpdatePublisher;
 import org.apache.ambari.server.orm.dao.AlertsDAO;
 import org.apache.ambari.server.orm.entities.AlertCurrentEntity;
 import org.slf4j.Logger;
@@ -46,6 +52,9 @@ public class AlertDefinitionDisabledListener {
   @Inject
   private AlertsDAO m_alertsDao = null;
 
+  @Inject
+  private STOMPUpdatePublisher STOMPUpdatePublisher;
+
   /**
    * Constructor.
    *
@@ -67,5 +76,11 @@ public class AlertDefinitionDisabledListener {
     LOG.debug("Received event {}", event);
 
     m_alertsDao.removeCurrentDisabledAlerts();
+
+    // send API STOMP alert update
+    Map<Long, Map<String, AlertSummaryGroupedRenderer.AlertDefinitionSummary>> alertUpdates = new HashMap<>();
+    alertUpdates.put(event.getClusterId(), AlertSummaryGroupedRenderer.generateEmptySummary(event.getDefinitionId(),
+        event.getDefinitionName()));
+    STOMPUpdatePublisher.publish(new AlertUpdateEvent(alertUpdates));
   }
 }
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/alerts/AlertReceivedListener.java b/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/alerts/AlertReceivedListener.java
index 7eabdb1..db80e8c 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/alerts/AlertReceivedListener.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/alerts/AlertReceivedListener.java
@@ -254,6 +254,14 @@ public class AlertReceivedListener {
 
           // create the event to fire later
           alertEvents.add(new InitialAlertEvent(clusterId, alert, current));
+
+          if (!alertUpdates.containsKey(clusterId)) {
+            alertUpdates.put(clusterId, new HashMap<>());
+          }
+          Map<String, AlertSummaryGroupedRenderer.AlertDefinitionSummary> summaries = alertUpdates.get(clusterId);
+
+          AlertSummaryGroupedRenderer.updateSummary(summaries, definition.getDefinitionId(),
+              definition.getDefinitionName(), alertState, alert.getTimestamp(), maintenanceState, alert.getText());
         } finally {
           // release the lock for this alert
           lock.unlock();