Browse Source

AMBARI-11504. Add changes for alert definitions in UpgradeCatalog210.java.(vbrodetskyi)

Vitaly Brodetskyi 10 years ago
parent
commit
f4114bc3b3

+ 78 - 14
ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog210.java

@@ -18,22 +18,21 @@
 
 package org.apache.ambari.server.upgrade;
 
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.text.MessageFormat;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
+import com.google.gson.Gson;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonParser;
+import com.google.inject.Inject;
+import com.google.inject.Injector;
+import com.google.inject.persist.Transactional;
 import org.apache.ambari.server.AmbariException;
 import org.apache.ambari.server.api.services.AmbariMetaInfo;
 import org.apache.ambari.server.configuration.Configuration;
 import org.apache.ambari.server.controller.AmbariManagementController;
 import org.apache.ambari.server.orm.DBAccessor.DBColumnInfo;
-import org.apache.ambari.server.orm.dao.StackDAO;
+import org.apache.ambari.server.orm.dao.AlertDefinitionDAO;
 import org.apache.ambari.server.orm.dao.DaoUtils;
+import org.apache.ambari.server.orm.dao.StackDAO;
+import org.apache.ambari.server.orm.entities.AlertDefinitionEntity;
 import org.apache.ambari.server.orm.entities.StackEntity;
 import org.apache.ambari.server.state.Cluster;
 import org.apache.ambari.server.state.Clusters;
@@ -45,10 +44,15 @@ import org.eclipse.persistence.internal.databaseaccess.FieldTypeDefinition;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.gson.Gson;
-import com.google.inject.Inject;
-import com.google.inject.Injector;
-import com.google.inject.persist.Transactional;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
 
 
 /**
@@ -887,6 +891,66 @@ public class UpgradeCatalog210 extends AbstractUpgradeCatalog {
     initializeClusterAndServiceWidgets();
 
     addMissingConfigs();
+    updateAlertDefinitions();
+  }
+
+  protected void updateAlertDefinitions() {
+    AmbariManagementController ambariManagementController = injector.getInstance(AmbariManagementController.class);
+    AlertDefinitionDAO alertDefinitionDAO = injector.getInstance(AlertDefinitionDAO.class);
+    Clusters clusters = ambariManagementController.getClusters();
+    List<String> metricAlerts = Arrays.asList("namenode_cpu", "namenode_hdfs_blocks_health",
+            "namenode_hdfs_capacity_utilization", "namenode_rpc_latency",
+            "namenode_directory_status", "datanode_health_summary", "datanode_storage");
+    List<String> mapredAlerts = Arrays.asList("mapreduce_history_server_cpu", "mapreduce_history_server_rpc_latency");
+    List<String> rmAlerts = Arrays.asList("yarn_resourcemanager_cpu", "yarn_resourcemanager_rpc_latency");
+
+    if (clusters != null) {
+      Map<String, Cluster> clusterMap = clusters.getClusters();
+
+      if (clusterMap != null && !clusterMap.isEmpty()) {
+        for (final Cluster cluster : clusterMap.values()) {
+
+          for (String metricName : metricAlerts) {
+            AlertDefinitionEntity alertDefinitionEntity =  alertDefinitionDAO.findByName(cluster.getClusterId(),
+                    metricName);
+            String source = alertDefinitionEntity.getSource();
+            JsonObject rootJson = new JsonParser().parse(source).getAsJsonObject();
+            rootJson.get("uri").getAsJsonObject().addProperty("kerberos_keytab",
+                    "{{hdfs-site/dfs.web.authentication.kerberos.keytab}}");
+            rootJson.get("uri").getAsJsonObject().addProperty("kerberos_principal",
+                    "{{hdfs-site/dfs.web.authentication.kerberos.principal}}");
+            alertDefinitionEntity.setSource(rootJson.toString());
+            alertDefinitionDAO.merge(alertDefinitionEntity);
+          }
+
+          for (String metricName : mapredAlerts) {
+            AlertDefinitionEntity alertDefinitionEntity =  alertDefinitionDAO.findByName(cluster.getClusterId(),
+                    metricName);
+            String source = alertDefinitionEntity.getSource();
+            JsonObject rootJson = new JsonParser().parse(source).getAsJsonObject();
+            rootJson.get("uri").getAsJsonObject().addProperty("kerberos_keytab",
+                    "{{mapred-site/mapreduce.jobhistory.webapp.spnego-keytab-file}}");
+            rootJson.get("uri").getAsJsonObject().addProperty("kerberos_principal",
+                    "{{mapred-site/mapreduce.jobhistory.webapp.spnego-principal}}");
+            alertDefinitionEntity.setSource(rootJson.toString());
+            alertDefinitionDAO.merge(alertDefinitionEntity);
+          }
+
+          for (String metricName : rmAlerts) {
+            AlertDefinitionEntity alertDefinitionEntity =  alertDefinitionDAO.findByName(cluster.getClusterId(),
+                    metricName);
+            String source = alertDefinitionEntity.getSource();
+            JsonObject rootJson = new JsonParser().parse(source).getAsJsonObject();
+            rootJson.get("uri").getAsJsonObject().addProperty("kerberos_keytab",
+                    "{{yarn-site/yarn.resourcemanager.webapp.spnego-keytab-file}}");
+            rootJson.get("uri").getAsJsonObject().addProperty("kerberos_principal",
+                    "{{yarn-site/yarn.resourcemanager.webapp.spnego-principal}}");
+            alertDefinitionEntity.setSource(rootJson.toString());
+            alertDefinitionDAO.merge(alertDefinitionEntity);
+          }
+        }
+      }
+    }
   }
 
   protected void addMissingConfigs() throws AmbariException {

+ 36 - 33
ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog210Test.java

@@ -18,30 +18,12 @@
 
 package org.apache.ambari.server.upgrade;
 
-import static junit.framework.Assert.assertEquals;
-import static org.easymock.EasyMock.capture;
-import static org.easymock.EasyMock.createMockBuilder;
-import static org.easymock.EasyMock.createNiceMock;
-import static org.easymock.EasyMock.createStrictMock;
-import static org.easymock.EasyMock.eq;
-import static org.easymock.EasyMock.expect;
-import static org.easymock.EasyMock.expectLastCall;
-import static org.easymock.EasyMock.replay;
-import static org.easymock.EasyMock.reset;
-import static org.easymock.EasyMock.verify;
-
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
-import java.sql.Connection;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import javax.persistence.EntityManager;
-
+import com.google.inject.Binder;
+import com.google.inject.Guice;
+import com.google.inject.Injector;
+import com.google.inject.Module;
+import com.google.inject.Provider;
+import com.google.inject.persist.PersistService;
 import org.apache.ambari.server.configuration.Configuration;
 import org.apache.ambari.server.controller.AmbariManagementController;
 import org.apache.ambari.server.orm.DBAccessor;
@@ -58,12 +40,28 @@ import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
 
-import com.google.inject.Binder;
-import com.google.inject.Guice;
-import com.google.inject.Injector;
-import com.google.inject.Module;
-import com.google.inject.Provider;
-import com.google.inject.persist.PersistService;
+import javax.persistence.EntityManager;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import static junit.framework.Assert.assertEquals;
+import static org.easymock.EasyMock.capture;
+import static org.easymock.EasyMock.createMockBuilder;
+import static org.easymock.EasyMock.createNiceMock;
+import static org.easymock.EasyMock.createStrictMock;
+import static org.easymock.EasyMock.eq;
+import static org.easymock.EasyMock.expect;
+import static org.easymock.EasyMock.expectLastCall;
+import static org.easymock.EasyMock.replay;
+import static org.easymock.EasyMock.reset;
+import static org.easymock.EasyMock.verify;
 
 /**
  * {@link org.apache.ambari.server.upgrade.UpgradeCatalog210} unit tests.
@@ -151,13 +149,15 @@ public class UpgradeCatalog210Test {
     Method initializeClusterAndServiceWidgets =
       UpgradeCatalog210.class.getDeclaredMethod("initializeClusterAndServiceWidgets");
 
-    Method addMissingConfigs =
-            UpgradeCatalog210.class.getDeclaredMethod("addMissingConfigs");
+    Method addMissingConfigs = UpgradeCatalog210.class.getDeclaredMethod("addMissingConfigs");
+
+    Method updateAlertDefinitions = UpgradeCatalog210.class.getDeclaredMethod("updateAlertDefinitions");
 
     UpgradeCatalog210 upgradeCatalog210 = createMockBuilder(UpgradeCatalog210.class)
       .addMockedMethod(addNewConfigurationsFromXml)
       .addMockedMethod(initializeClusterAndServiceWidgets)
-      .addMockedMethod(addMissingConfigs).createMock();
+      .addMockedMethod(addMissingConfigs)
+      .addMockedMethod(updateAlertDefinitions).createMock();
 
     upgradeCatalog210.addNewConfigurationsFromXml();
     expectLastCall().once();
@@ -168,6 +168,9 @@ public class UpgradeCatalog210Test {
     upgradeCatalog210.addMissingConfigs();
     expectLastCall().once();
 
+    upgradeCatalog210.updateAlertDefinitions();
+    expectLastCall().once();
+
     replay(upgradeCatalog210);
 
     upgradeCatalog210.executeDMLUpdates();