You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by nc...@apache.org on 2014/02/03 20:34:39 UTC

git commit: AMBARI-4496. Filter ignored alerts for Host and Service (ncole)

Updated Branches:
  refs/heads/trunk c92863cba -> cf5c6ad64


AMBARI-4496.  Filter ignored alerts for Host and Service (ncole)


Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/cf5c6ad6
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/cf5c6ad6
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/cf5c6ad6

Branch: refs/heads/trunk
Commit: cf5c6ad6445909bd23fc94affd4e1df6e7daadc7
Parents: c92863c
Author: Nate Cole <nc...@hortonworks.com>
Authored: Fri Jan 31 20:32:51 2014 -0500
Committer: Nate Cole <nc...@hortonworks.com>
Committed: Mon Feb 3 14:10:45 2014 -0500

----------------------------------------------------------------------
 .../server/configuration/Configuration.java     |   2 +
 .../nagios/NagiosPropertyProvider.java          |  37 +++++-
 .../nagios/NagiosPropertyProviderTest.java      | 133 ++++++++++++++++++-
 3 files changed, 167 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/cf5c6ad6/ambari-server/src/main/java/org/apache/ambari/server/configuration/Configuration.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/configuration/Configuration.java b/ambari-server/src/main/java/org/apache/ambari/server/configuration/Configuration.java
index 293792b..c06c92c 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/configuration/Configuration.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/configuration/Configuration.java
@@ -168,6 +168,8 @@ public class Configuration {
   public static final String JAVAX_SSL_TRUSTSTORE_TYPE = "javax.net.ssl.trustStoreType";
   public static final String GANGLIA_HTTPS_KEY = "ganglia.https";
   public static final String NAGIOS_HTTPS_KEY = "nagios.https";
+  public static final String NAGIOS_IGNORE_FOR_SERVICES_KEY = "nagios.ignore_for_services";
+  public static final String NAGIOS_IGNORE_FOR_HOSTS_KEY = "nagios.ignore_for_hosts";
   public static final String SRVR_TWO_WAY_SSL_PORT_DEFAULT = "8441";
   public static final String SRVR_ONE_WAY_SSL_PORT_DEFAULT = "8440";
   public static final String SRVR_CRT_NAME_DEFAULT = "ca.crt";

http://git-wip-us.apache.org/repos/asf/ambari/blob/cf5c6ad6/ambari-server/src/main/java/org/apache/ambari/server/controller/nagios/NagiosPropertyProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/nagios/NagiosPropertyProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/nagios/NagiosPropertyProvider.java
index 79222af..0b05422 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/nagios/NagiosPropertyProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/nagios/NagiosPropertyProvider.java
@@ -20,9 +20,11 @@ package org.apache.ambari.server.controller.nagios;
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collections;
 import java.util.Comparator;
 import java.util.HashSet;
+import java.util.Iterator;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
@@ -35,6 +37,7 @@ import java.util.concurrent.TimeUnit;
 
 import org.apache.ambari.server.AmbariException;
 import org.apache.ambari.server.configuration.ComponentSSLConfiguration;
+import org.apache.ambari.server.configuration.Configuration;
 import org.apache.ambari.server.controller.internal.BaseProvider;
 import org.apache.ambari.server.controller.spi.Predicate;
 import org.apache.ambari.server.controller.spi.PropertyProvider;
@@ -69,6 +72,13 @@ public class NagiosPropertyProvider extends BaseProvider implements PropertyProv
   private static final String ALERT_SUMMARY_WARNING_PROPERTY_ID = "alerts/summary/WARNING";
   private static final String ALERT_SUMMARY_CRITICAL_PROPERTY_ID = "alerts/summary/CRITICAL";
   
+  private static final List<String> IGNORABLE_FOR_SERVICES = new ArrayList<String>(
+      Arrays.asList("NodeManager health", "NodeManager process", "TaskTracker process",
+      "RegionServer process", "DataNode process", "DataNode space",
+      "ZooKeeper Server process"));
+  
+  private static final List<String> IGNORABLE_FOR_HOSTS = new ArrayList<String>(
+      Arrays.asList("percent"));
   
   // holds alerts for clusters.  clusterName -> AlertStates
   private static final Map<String, AlertState> CLUSTER_ALERTS = new ConcurrentHashMap<String, AlertState>();
@@ -105,6 +115,20 @@ public class NagiosPropertyProvider extends BaseProvider implements PropertyProv
   @Inject
   public static void init(Injector injector) {
     clusters = injector.getInstance(Clusters.class);
+    Configuration config = injector.getInstance(Configuration.class);
+    
+    String ignores = config.getProperty(Configuration.NAGIOS_IGNORE_FOR_SERVICES_KEY);
+    if (null != ignores) {
+      for (String str : ignores.split(","))
+        IGNORABLE_FOR_SERVICES.add(str);
+    }
+
+    ignores = config.getProperty(Configuration.NAGIOS_IGNORE_FOR_HOSTS_KEY);
+    if (null != ignores) {
+      for (String str : ignores.split(","))
+        IGNORABLE_FOR_HOSTS.add(str);
+    }
+    
   }  
   
   public NagiosPropertyProvider(Resource.Type type,
@@ -133,7 +157,6 @@ public class NagiosPropertyProvider extends BaseProvider implements PropertyProv
 
     Set<String> propertyIds = getRequestPropertyIds(request, predicate);
     
-    
     for (Resource res : resources) {
       String matchValue = res.getPropertyValue(resourceTypeProperty).toString();
       
@@ -182,9 +205,21 @@ public class NagiosPropertyProvider extends BaseProvider implements PropertyProv
       switch (resourceType.getInternalType()) {
         case Service:
           match = alert.getService().equals(matchValue);
+          if (match && null != alert.getDescription() &&
+              IGNORABLE_FOR_SERVICES.contains(alert.getDescription())) {
+            match = false;
+          }
           break;
         case Host:
           match = alert.getHost().equals(matchValue);
+          if (match && null != alert.getDescription()) {
+            String desc = alert.getDescription();
+            Iterator<String> it = IGNORABLE_FOR_HOSTS.iterator();
+            while (it.hasNext() && match) {
+              if (-1 != desc.toLowerCase().indexOf(it.next()))
+                match = false;
+            }
+          }
           break;
         default:
           break;

http://git-wip-us.apache.org/repos/asf/ambari/blob/cf5c6ad6/ambari-server/src/test/java/org/apache/ambari/server/controller/nagios/NagiosPropertyProviderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/nagios/NagiosPropertyProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/nagios/NagiosPropertyProviderTest.java
index 649f9d8..0b8e6cc 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/nagios/NagiosPropertyProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/nagios/NagiosPropertyProviderTest.java
@@ -23,6 +23,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
+import org.apache.ambari.server.configuration.Configuration;
 import org.apache.ambari.server.controller.ganglia.TestStreamProvider;
 import org.apache.ambari.server.controller.internal.ResourceImpl;
 import org.apache.ambari.server.controller.spi.Request;
@@ -52,13 +53,14 @@ import com.google.inject.persist.PersistService;
 public class NagiosPropertyProviderTest {
 
   private static final String HOST = "c6401.ambari.apache.org";
-  
+
+  private InMemoryDefaultTestModule module = null;
   private Clusters clusters = null;
   private Injector injector = null;
 
   @Before
   public void setup() throws Exception {
-    InMemoryDefaultTestModule module = new InMemoryDefaultTestModule();
+    module = new InMemoryDefaultTestModule();
 
     injector = Guice.createInjector(module);
     injector.getInstance(GuiceJpaInitializer.class);
@@ -181,7 +183,7 @@ public class NagiosPropertyProviderTest {
     Assert.assertTrue(List.class.isInstance(values.get("alerts").get("detail")));
     
     List<?> list = (List<?>) values.get("alerts").get("detail");
-    Assert.assertTrue(4 == list.size());
+    Assert.assertEquals(Integer.valueOf(3), Integer.valueOf(list.size()));
     for (Object o : list) {
       Assert.assertTrue(Map.class.isInstance(o));
       Map<?, ?> map = (Map<?, ?>) o;
@@ -197,7 +199,7 @@ public class NagiosPropertyProviderTest {
     
     Assert.assertTrue(summary.get("OK").equals(Integer.valueOf(1)));
     Assert.assertTrue(summary.get("WARNING").equals(Integer.valueOf(0)));
-    Assert.assertTrue(summary.get("CRITICAL").equals(Integer.valueOf(3)));
+    Assert.assertTrue(summary.get("CRITICAL").equals(Integer.valueOf(2)));
   }  
   
 
@@ -258,6 +260,129 @@ public class NagiosPropertyProviderTest {
     Assert.assertTrue(summary.get("OK").equals(Integer.valueOf(6)));
     Assert.assertTrue(summary.get("WARNING").equals(Integer.valueOf(0)));
     Assert.assertTrue(summary.get("CRITICAL").equals(Integer.valueOf(1)));
+  }
+  
+  @Test
+  public void testNagiosHostAlertsWithIgnore() throws Exception {
+    Cluster cluster = clusters.getCluster("c1");
+    Service service = cluster.addService("NAGIOS");
+    service.setDesiredStackVersion(new StackId("HDP-2.0.5"));
+    service.persist();
+    
+    ServiceComponent sc = service.addServiceComponent("NAGIOS_SERVER");
+    sc.setDesiredStackVersion(new StackId("HDP-2.0.5"));
+    sc.addServiceComponentHost(HOST);
+    sc.persist();
+    
+    TestStreamProvider streamProvider = new TestStreamProvider("nagios_alerts.txt");
+
+    NagiosPropertyProvider npp = new NagiosPropertyProvider(Resource.Type.Host,
+        streamProvider,
+        "Hosts/cluster_name",
+        "Hosts/host_name");
+    npp.forceReset();
+    
+    Resource resource = new ResourceImpl(Resource.Type.Service);
+    resource.setProperty("Hosts/cluster_name", "c1");
+    resource.setProperty("Hosts/host_name", "c6401.ambari.apache.org");
+    
+    // request with an empty set should get all supported properties
+    Request request = PropertyHelper.getReadRequest(Collections.<String>emptySet(), new HashMap<String, TemporalInfo>());
+
+    Set<Resource> set = npp.populateResources(Collections.singleton(resource), request, null);
+    Assert.assertEquals(1, set.size());
+    
+    Resource res = set.iterator().next();
+    
+    Map<String, Map<String, Object>> values = res.getPropertiesMap();
+    
+    Assert.assertTrue(values.containsKey("alerts"));
+    Assert.assertTrue(values.containsKey("alerts/summary"));
+    Assert.assertTrue(values.get("alerts").containsKey("detail"));
+    Assert.assertTrue(List.class.isInstance(values.get("alerts").get("detail")));
+    
+    List<?> list = (List<?>) values.get("alerts").get("detail");
+    Assert.assertEquals(Integer.valueOf(16), Integer.valueOf(list.size()));
+    for (Object o : list) {
+      Assert.assertTrue(Map.class.isInstance(o));
+      Map<?, ?> map = (Map<?, ?>) o;
+      Assert.assertTrue(map.containsKey("host_name"));
+      String host = map.get("host_name").toString();
+      Assert.assertEquals("c6401.ambari.apache.org", host);
+    }
+    
+    Map<String, Object> summary = values.get("alerts/summary");
+    Assert.assertTrue(summary.containsKey("OK"));
+    Assert.assertTrue(summary.containsKey("WARNING"));
+    Assert.assertTrue(summary.containsKey("CRITICAL"));
+    
+    Assert.assertEquals(summary.get("OK"), Integer.valueOf(15));
+    Assert.assertEquals(summary.get("WARNING"), Integer.valueOf(0));
+    Assert.assertEquals(summary.get("CRITICAL"), Integer.valueOf(1));
+  }  
+  
+  @Test
+  public void testNagiosServiceAlertsAddIgnore() throws Exception {
+    module.getProperties().setProperty(Configuration.NAGIOS_IGNORE_FOR_SERVICES_KEY,
+        "HBase Master process on c6401.ambari.apache.org");
+    
+    Cluster cluster = clusters.getCluster("c1");
+    Service service = cluster.addService("NAGIOS");
+    service.setDesiredStackVersion(new StackId("HDP-2.0.5"));
+    service.persist();
+    
+    ServiceComponent sc = service.addServiceComponent("NAGIOS_SERVER");
+    sc.setDesiredStackVersion(new StackId("HDP-2.0.5"));
+    sc.addServiceComponentHost(HOST);
+    sc.persist();
+    
+    TestStreamProvider streamProvider = new TestStreamProvider("nagios_alerts.txt");
+
+    NagiosPropertyProvider npp = new NagiosPropertyProvider(Resource.Type.Service,
+        streamProvider,
+        "ServiceInfo/cluster_name",
+        "ServiceInfo/service_name");
+    npp.forceReset();
+    NagiosPropertyProvider.init(injector);
+    
+    Resource resource = new ResourceImpl(Resource.Type.Service);
+    resource.setProperty("ServiceInfo/cluster_name", "c1");
+    resource.setProperty("ServiceInfo/service_name", "HBASE");
+    
+    // request with an empty set should get all supported properties
+    Request request = PropertyHelper.getReadRequest(Collections.<String>emptySet(), new HashMap<String, TemporalInfo>());
+
+    Set<Resource> set = npp.populateResources(Collections.singleton(resource), request, null);
+    Assert.assertEquals(1, set.size());
+    
+    Resource res = set.iterator().next();
+    
+    Map<String, Map<String, Object>> values = res.getPropertiesMap();
+    
+    Assert.assertTrue(values.containsKey("alerts"));
+    Assert.assertTrue(values.containsKey("alerts/summary"));
+    Assert.assertTrue(values.get("alerts").containsKey("detail"));
+    Assert.assertTrue(List.class.isInstance(values.get("alerts").get("detail")));
+    
+    List<?> list = (List<?>) values.get("alerts").get("detail");
+    // removed an additional one
+    Assert.assertEquals(Integer.valueOf(2), Integer.valueOf(list.size()));
+    for (Object o : list) {
+      Assert.assertTrue(Map.class.isInstance(o));
+      Map<?, ?> map = (Map<?, ?>) o;
+      Assert.assertTrue(map.containsKey("service_name"));
+      String serviceName = map.get("service_name").toString();
+      Assert.assertTrue("expected HBASE", serviceName.equals("HBASE"));
+    }
+    
+    Map<String, Object> summary = values.get("alerts/summary");
+    Assert.assertTrue(summary.containsKey("OK"));
+    Assert.assertTrue(summary.containsKey("WARNING"));
+    Assert.assertTrue(summary.containsKey("CRITICAL"));
+    
+    Assert.assertTrue(summary.get("OK").equals(Integer.valueOf(1)));
+    Assert.assertTrue(summary.get("WARNING").equals(Integer.valueOf(0)));
+    Assert.assertTrue(summary.get("CRITICAL").equals(Integer.valueOf(1)));
   }    
   
 }