You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by at...@apache.org on 2015/09/04 16:32:10 UTC

ambari git commit: AMBARI-13008 UI does not tolerate ATS being absent. (atkach)

Repository: ambari
Updated Branches:
  refs/heads/trunk 6577e8b82 -> cc93d351e


AMBARI-13008 UI does not tolerate ATS being absent. (atkach)


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

Branch: refs/heads/trunk
Commit: cc93d351e67cd0806f1f7b3af21dcbebb06c5c4c
Parents: 6577e8b
Author: Andrii Tkach <at...@hortonworks.com>
Authored: Fri Sep 4 17:31:33 2015 +0300
Committer: Andrii Tkach <at...@hortonworks.com>
Committed: Fri Sep 4 17:31:55 2015 +0300

----------------------------------------------------------------------
 .../app/mappers/service_metrics_mapper.js       | 42 +++++++-----
 .../test/mappers/service_metrics_mapper_test.js | 69 +++++++++++++++++++-
 2 files changed, 93 insertions(+), 18 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/cc93d351/ambari-web/app/mappers/service_metrics_mapper.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/mappers/service_metrics_mapper.js b/ambari-web/app/mappers/service_metrics_mapper.js
index 1f1aa3a..9fc3d70 100644
--- a/ambari-web/app/mappers/service_metrics_mapper.js
+++ b/ambari-web/app/mappers/service_metrics_mapper.js
@@ -251,6 +251,19 @@ App.serviceMetricsMapper = App.QuickDataMapper.create({
   },
 
   /**
+   * verify that service component has host components
+   * @param {object} component
+   * @param {string} name
+   * @returns {boolean}
+   */
+  isHostComponentPresent: function(component, name) {
+    return Boolean(component.ServiceComponentInfo
+           && component.ServiceComponentInfo.component_name === name
+           && Array.isArray(component.host_components)
+           && component.host_components.length > 0);
+  },
+
+  /**
    * Generate service mapped object and load data to extended models.
    *
    * @method mapExtendedModel
@@ -386,7 +399,7 @@ App.serviceMetricsMapper = App.QuickDataMapper.create({
     var hdfsConfig = this.hdfsConfig;
     var self = this;
     item.components.forEach(function (component) {
-      if (component.ServiceComponentInfo && component.ServiceComponentInfo.component_name == "NAMENODE") {
+      if (this.isHostComponentPresent(component, 'NAMENODE')) {
         //enabled HA
         if (component.host_components.length == 2) {
           var haState1;
@@ -460,20 +473,16 @@ App.serviceMetricsMapper = App.QuickDataMapper.create({
         }
         item.name_node_id = "NAMENODE" + "_" + component.host_components[0].HostRoles.host_name;
       }
-      if (component.ServiceComponentInfo && component.ServiceComponentInfo.component_name == "JOURNALNODE") {
+      if (this.isHostComponentPresent(component, "JOURNALNODE")) {
         item.journal_nodes = [];
-        if (component.host_components) {
           component.host_components.forEach(function (hc) {
             item.journal_nodes.push("JOURNALNODE" + "_" + hc.HostRoles.host_name);
           });
-        }
       }
-      if (component.ServiceComponentInfo &&
-          component.ServiceComponentInfo.component_name == "SECONDARY_NAMENODE" &&
-          component.host_components.length > 0) {
+      if (this.isHostComponentPresent(component, "SECONDARY_NAMENODE")) {
         item.sname_node_id = "SECONDARY_NAMENODE" + "_" + component.host_components[0].HostRoles.host_name;
       }
-    });
+    }, this);
     // Map
     var finalJson = this.parseIt(item, finalConfig);
     finalJson.quick_links = [1, 2, 3, 4];
@@ -487,7 +496,7 @@ App.serviceMetricsMapper = App.QuickDataMapper.create({
     // Change the JSON so that it is easy to map
     var yarnConfig = this.yarnConfig;
     item.components.forEach(function (component) {
-      if (component.ServiceComponentInfo && component.ServiceComponentInfo.component_name == "RESOURCEMANAGER") {
+      if (this.isHostComponentPresent(component, "RESOURCEMANAGER")) {
         item.resourceManagerComponent = component;
 
         // if YARN has two host components, ACTIVE one should be first in component.host_components array for proper metrics mapping
@@ -510,10 +519,10 @@ App.serviceMetricsMapper = App.QuickDataMapper.create({
         finalConfig = jQuery.extend(finalConfig, yarnConfig);
         item.resource_manager_id = "RESOURCEMANAGER" + "_" + component.host_components[0].HostRoles.host_name;
       }
-      if (component.ServiceComponentInfo && component.ServiceComponentInfo.component_name == "APP_TIMELINE_SERVER") {
+      if (this.isHostComponentPresent(component, "APP_TIMELINE_SERVER")) {
         item.app_timeline_server_id = "APP_TIMELINE_SERVER" + "_" + component.host_components[0].HostRoles.host_name;
       }
-    });
+    }, this);
     // Map
     var finalJson = this.parseIt(item, finalConfig);
     finalJson.quick_links = [23, 24, 25, 26];
@@ -537,12 +546,12 @@ App.serviceMetricsMapper = App.QuickDataMapper.create({
     // Change the JSON so that it is easy to map
     var mapReduce2Config = this.mapReduce2Config;
     item.components.forEach(function (component) {
-      if (component.ServiceComponentInfo && component.ServiceComponentInfo.component_name == "HISTORYSERVER") {
+      if (this.isHostComponentPresent(component, "HISTORYSERVER")) {
         item.jobHistoryServerComponent = component;
         finalConfig = jQuery.extend(finalConfig, mapReduce2Config);
         item.job_history_server_id = "HISTORYSERVER" + "_" + component.host_components[0].HostRoles.host_name;
       }
-    });
+    }, this);
     // Map
     var finalJson = this.parseIt(item, finalConfig);
     finalJson.quick_links = [27, 28, 29, 30];
@@ -555,7 +564,7 @@ App.serviceMetricsMapper = App.QuickDataMapper.create({
     var finalConfig = jQuery.extend({}, this.config);
     var hbaseConfig = this.hbaseConfig;
     item.components.forEach(function (component) {
-      if (component.ServiceComponentInfo && component.ServiceComponentInfo.component_name == "HBASE_MASTER") {
+      if (this.isHostComponentPresent(component, "HBASE_MASTER")) {
         item.masterComponent = component;
         finalConfig = jQuery.extend(finalConfig, hbaseConfig);
         if (component.host_components.length) {
@@ -575,7 +584,7 @@ App.serviceMetricsMapper = App.QuickDataMapper.create({
         }
         item.master_id = "HBASE_MASTER" + "_" + component.host_components[0].HostRoles.host_name;
       }
-    });
+    }, this);
     // Map
     var finalJson = this.parseIt(item, finalConfig);
     finalJson.average_load = parseFloat(finalJson.average_load).toFixed(2);
@@ -660,5 +669,4 @@ App.serviceMetricsMapper = App.QuickDataMapper.create({
     item.restApiComponent = restApiMetrics;
     return this.parseIt(item, finalConfig);
   }
-})
-;
+});
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/cc93d351/ambari-web/test/mappers/service_metrics_mapper_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/mappers/service_metrics_mapper_test.js b/ambari-web/test/mappers/service_metrics_mapper_test.js
index e888325..d2c9cc0 100644
--- a/ambari-web/test/mappers/service_metrics_mapper_test.js
+++ b/ambari-web/test/mappers/service_metrics_mapper_test.js
@@ -58,7 +58,74 @@ describe('App.serviceMetricsMapper', function () {
         result = App.serviceMetricsMapper.yarnMapper(item);
       expect(result.queue).to.equal("{\"root\":{\"default\":{}}}");
     });
-
   });
 
+  describe("#isHostComponentPresent()", function () {
+    var testCases = [
+      {
+        title: 'component is empty',
+        data: {
+          component: {},
+          name: 'C1'
+        },
+        result: false
+      },
+      {
+        title: 'component name does not match',
+        data: {
+          component: {
+            ServiceComponentInfo: {
+              component_name: ''
+            }
+          },
+          name: 'C1'
+        },
+        result: false
+      },
+      {
+        title: 'host_components is undefined',
+        data: {
+          component: {
+            ServiceComponentInfo: {
+              component_name: 'C1'
+            }
+          },
+          name: 'C1'
+        },
+        result: false
+      },
+      {
+        title: 'host_components is empty',
+        data: {
+          component: {
+            ServiceComponentInfo: {
+              component_name: 'C1'
+            },
+            host_components: []
+          },
+          name: 'C1'
+        },
+        result: false
+      },
+      {
+        title: 'host_components has component',
+        data: {
+          component: {
+            ServiceComponentInfo: {
+              component_name: 'C1'
+            },
+            host_components: [{}]
+          },
+          name: 'C1'
+        },
+        result: true
+      }
+    ];
+
+    testCases.forEach(function (test) {
+      it(test.title, function () {
+        expect(App.serviceMetricsMapper.isHostComponentPresent(test.data.component, test.data.name)).to.equal(test.result);
+      });
+    });
+  });
 });