You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by ja...@apache.org on 2013/12/18 00:56:20 UTC

git commit: AMBARI-4095. Quick links should work after reconfiguring ports for master components. (jaimin)

Updated Branches:
  refs/heads/trunk b12c19c3c -> ac46ed490


AMBARI-4095. Quick links should work after reconfiguring ports for master components. (jaimin)


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

Branch: refs/heads/trunk
Commit: ac46ed4908b37185016f627d4091f7e6de2990cb
Parents: b12c19c
Author: Jaimin Jetly <ja...@hortonworks.com>
Authored: Tue Dec 17 15:55:53 2013 -0800
Committer: Jaimin Jetly <ja...@hortonworks.com>
Committed: Tue Dec 17 15:55:59 2013 -0800

----------------------------------------------------------------------
 ambari-web/app/models/quick_links.js            | 248 +++++++++++++++----
 .../app/views/common/quick_view_link_view.js    | 130 ++++++----
 2 files changed, 278 insertions(+), 100 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/ac46ed49/ambari-web/app/models/quick_links.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/models/quick_links.js b/ambari-web/app/models/quick_links.js
index 43a6bc5..4c308bb 100644
--- a/ambari-web/app/models/quick_links.js
+++ b/ambari-web/app/models/quick_links.js
@@ -17,147 +17,254 @@
  */
 
 var App = require('app');
+var portRegex = '\\w*:(\\d+)';
 
 App.QuickLinks = DS.Model.extend({
   label: DS.attr('string'),
   url: DS.attr('string'),
   service_id: DS.attr('string'),
-  template: DS.attr('string')
+  template: DS.attr('string'),
+  http_config: DS.attr('string'),
+  https_config: DS.attr('string'),
+  site: DS.attr('string'),
+  regex: DS.attr('string'),
+  default_http_port: DS.attr('number'),
+  default_https_port: DS.attr('number')
 });
 
+
 App.QuickLinks.FIXTURES = [
   {
     id:1,
     label:'NameNode UI',
-    url:'%@://%@:50070/dfshealth.jsp',
+    url:'%@://%@:%@/dfshealth.jsp',
     service_id: 'HDFS',
-    template:'%@://%@:50070/dfshealth.jsp'
+    template:'%@://%@:%@/dfshealth.jsp',
+    http_config: 'dfs.namenode.http-address',
+    https_config: 'dfs.namenode.https-address',
+    site: 'hdfs-site',
+    regex: portRegex,
+    default_http_port: 50070,
+    default_https_port: 50470
   },
   {
     id:2,
     label:'NameNode logs',
-    url:'%@://%@:50070/logs',
+    url:'%@://%@:%@/logs',
     service_id: 'HDFS',
-    template:'%@://%@:50070/logs'
+    template:'%@://%@:%@/logs',
+    http_config: 'dfs.namenode.http-address',
+    https_config: 'dfs.namenode.https-address',
+    site: 'hdfs-site',
+    regex: portRegex,
+    default_http_port: 50070,
+    default_https_port: 50470
   },
   {
     id:3,
     label:'NameNode JMX',
-    url:'%@://%@:50070/jmx',
+    url:'%@://%@:%@/jmx',
     service_id: 'HDFS',
-    template:'%@://%@:50070/jmx'
+    template:'%@://%@:%@/jmx',
+    http_config: 'dfs.namenode.http-address',
+    https_config: 'dfs.namenode.https-address',
+    site: 'hdfs-site',
+    regex: portRegex,
+    default_http_port: 50070,
+    default_https_port: 50470
   },
   {
     id:4,
     label:'Thread Stacks',
-    url:'%@://%@:50070/stacks',
+    url:'%@://%@:%@/stacks',
     service_id: 'HDFS',
-    template:'%@://%@:50070/stacks'
+    template:'%@://%@:%@/stacks',
+    http_config: 'dfs.namenode.http-address',
+    https_config: 'dfs.namenode.https-address',
+    site: 'hdfs-site',
+    regex: portRegex,
+    default_http_port: 50070,
+    default_https_port: 50470
   },
   {
     id:5,
     label:'JobTracker UI',
-    url:'%@://%@:50030/jobtracker.jsp',
+    url:'%@://%@:%@/jobtracker.jsp',
     service_id: 'MAPREDUCE',
-    template:'%@://%@:50030/jobtracker.jsp'
+    template:'%@://%@:%@/jobtracker.jsp',
+    http_config: 'mapred.job.tracker.http.address',
+    https_config: 'mapred.job.tracker.https.address',
+    site: 'mapred-site',
+    regex: portRegex,
+    default_http_port: 50030,
+    default_https_port: 50035
   },
   {
     id:6,
     label:'Scheduling Info',
-    url:'%@://%@:50030/scheduler',
+    url:'%@://%@:%@/scheduler',
     service_id: 'MAPREDUCE',
-    template:'%@://%@:50030/scheduler'
+    template:'%@://%@:%@/scheduler',
+    http_config: 'mapred.job.tracker.http.address',
+    https_config: 'mapred.job.tracker.https.address',
+    site: 'mapred-site',
+    regex: portRegex,
+    default_http_port: 50030,
+    default_https_port: 50035
   },
   {
     id:7,
     label:'Running Jobs',
-    url:'%@://%@:50030/jobtracker.jsp#running_jobs',
+    url:'%@://%@:%@/jobtracker.jsp#running_jobs',
     service_id: 'MAPREDUCE',
-    template:'%@://%@:50030/jobtracker.jsp#running_jobs'
+    template:'%@://%@:%@/jobtracker.jsp#running_jobs',
+    http_config: 'mapred.job.tracker.http.address',
+    https_config: 'mapred.job.tracker.https.address',
+    site: 'mapred-site',
+    regex: portRegex,
+    default_http_port: 50030,
+    default_https_port: 50035
   },
   {
     id:8,
     label:'Retired Jobs',
-    url:'%@://%@:50030/jobtracker.jsp#retired_jobs',
+    url:'%@://%@:%@/jobtracker.jsp#retired_jobs',
     service_id: 'MAPREDUCE',
-    template:'%@://%@:50030/jobtracker.jsp#retired_jobs'
+    template:'%@://%@:%@/jobtracker.jsp#retired_jobs',
+    http_config: 'mapred.job.tracker.http.address',
+    https_config: 'mapred.job.tracker.https.address',
+    site: 'mapred-site',
+    regex: portRegex,
+    default_http_port: 50030,
+    default_https_port: 50035
   },
   {
     id:9,
     label:'JobHistory Server',
-    url:'%@://%@:51111/jobhistoryhome.jsp',
+    url:'%@://%@:%@/jobhistoryhome.jsp',
     service_id: 'MAPREDUCE',
-    template:'%@://%@:51111/jobhistoryhome.jsp'
+    template:'%@://%@:%@/jobhistoryhome.jsp',
+    http_config: 'mapreduce.history.server.http.address',
+    site: 'mapred-site',
+    regex: portRegex,
+    default_http_port: 51111
   },
+
   {
     id:10,
     label:'JobTracker Logs',
-    url:'%@://%@:50030/logs',
+    url:'%@://%@:%@/logs',
     service_id: 'MAPREDUCE',
-    template:'%@://%@:50030/logs'
+    template:'%@://%@:%@/logs',
+    http_config: 'mapred.job.tracker.http.address',
+    https_config: 'mapred.job.tracker.https.address',
+    site: 'mapred-site',
+    regex: portRegex,
+    default_http_port: 50030,
+    default_https_port: 50035
   },
   {
     id:11,
     label:'JobTracker JMX',
-    url:'%@://%@:50030/jmx',
+    url:'%@://%@:%@/jmx',
     service_id: 'MAPREDUCE',
-    template:'%@://%@:50030/jmx'
+    template:'%@://%@:%@/jmx',
+    http_config: 'mapred.job.tracker.http.address',
+    https_config: 'mapred.job.tracker.https.address',
+    site: 'mapred-site',
+    regex: portRegex,
+    default_http_port: 50030,
+    default_https_port: 50035
   },
   {
     id:12,
     label:'Thread Stacks',
-    url:'%@://%@:50030/stacks',
+    url:'%@://%@:%@/stacks',
     service_id: 'MAPREDUCE',
-    template:'%@://%@:50030/stacks'
+    template:'%@://%@:%@/stacks',
+    http_config: 'mapred.job.tracker.http.address',
+    https_config: 'mapred.job.tracker.https.address',
+    site: 'mapred-site',
+    regex: portRegex,
+    default_http_port: 50030,
+    default_https_port: 50035
   },
   {
     id:13,
     label:'HBase Master UI',
-    url:'%@://%@:60010/master-status',
+    url:'%@://%@:%@/master-status',
     service_id: 'HBASE',
-    template:'%@://%@:60010/master-status'
+    template:'%@://%@:%@/master-status',
+    http_config: 'hbase.master.info.port',
+    site: 'hbase-site',
+    regex: '^(\\d+)$',
+    default_http_port: 60010
   },
   {
     id:14,
     label:'HBase Logs',
     url:'%@://%@:60010/logs',
     service_id: 'HBASE',
-    template:'%@://%@:60010/logs'
+    template:'%@://%@:%@/logs',
+    http_config: 'hbase.master.info.port',
+    site: 'hbase-site',
+    regex: '^(\\d+)$',
+    default_http_port: 60010
   },
   {
     id:15,
     label:'Zookeeper Info',
     url:'%@://%@:60010/zk.jsp',
     service_id: 'HBASE',
-    template:'%@://%@:60010/zk.jsp'
+    template:'%@://%@:%@/zk.jsp',
+    http_config: 'hbase.master.info.port',
+    site: 'hbase-site',
+    regex: '^(\\d+)$',
+    default_http_port: 60010
   },
   {
     id:16,
     label:'HBase Master JMX',
     url:'%@://%@:60010/jmx',
     service_id: 'HBASE',
-    template:'%@://%@:60010/jmx'
+    template:'%@://%@:%@/jmx',
+    http_config: 'hbase.master.info.port',
+    site: 'hbase-site',
+    regex: '^(\\d+)$',
+    default_http_port: 60010
   },
   {
     id:17,
     label:'Debug Dump',
-    url:'%@://%@:60010/dump',
+    url:'%@://%@:%@/dump',
     service_id: 'HBASE',
-    template:'%@://%@:60010/dump'
+    template:'%@://%@:%@/dump',
+    http_config: 'hbase.master.info.port',
+    site: 'hbase-site',
+    regex: '^(\\d+)$',
+    default_http_port: 60010
   },
   {
     id:18,
     label:'Thread Stacks',
-    url:'%@://%@:60010/stacks',
+    url:'%@://%@:%@/stacks',
     service_id: 'HBASE',
-    template:'%@://%@:60010/stacks'
+    template:'%@://%@:%@/stacks',
+    http_config: 'hbase.master.info.port',
+    site: 'hbase-site',
+    regex: '^(\\d+)$',
+    default_http_port: 60010
   },
   {
     id:19,
     label:'Oozie Web UI',
-    url:'%@://%@:11000/oozie',
+    url:'%@://%@:%@/oozie',
     service_id: 'OOZIE',
-    template:'%@://%@:11000/oozie'
+    template:'%@://%@:%@/oozie',
+    http_config: 'oozie.base.url',
+    site: 'oozie-site',
+    regex: portRegex,
+    default_http_port: 11000
   },
   {
     id:20,
@@ -186,55 +293,100 @@ App.QuickLinks.FIXTURES = [
     label:'ResourceManager UI',
     url:'%@://%@:%@',
     service_id: 'YARN',
-    template:'%@://%@:%@'
+    template:'%@://%@:%@',
+    http_config: 'yarn.resourcemanager.webapp.address',
+    https_config: 'yarn.resourcemanager.webapp.https.address',
+    site: 'yarn-site',
+    regex: portRegex,
+    default_http_port: 8088,
+    default_https_port: 8090
+
   },
   {
     id:24,
     label:'ResourceManager logs',
     url:'%@://%@:%@/logs',
     service_id: 'YARN',
-    template:'%@://%@:%@/logs'
+    template:'%@://%@:%@/logs',
+    http_config: 'yarn.resourcemanager.webapp.address',
+    https_config: 'yarn.resourcemanager.webapp.https.address',
+    site: 'yarn-site',
+    regex: portRegex,
+    default_http_port: 8088,
+    default_https_port: 8090
   },
   {
     id:25,
     label:'ResourceManager JMX',
     url:'%@://%@:%@/jmx',
     service_id: 'YARN',
-    template:'%@://%@:%@/jmx'
+    template:'%@://%@:%@/jmx',
+    http_config: 'yarn.resourcemanager.webapp.address',
+    https_config: 'yarn.resourcemanager.webapp.https.address',
+    site: 'yarn-site',
+    regex: portRegex,
+    default_http_port: 8088,
+    default_https_port: 8090
   },
   {
     id:26,
     label:'Thread Stacks',
     url:'%@://%@:%@/stacks',
     service_id: 'YARN',
-    template:'%@://%@:%@/stacks'
+    template:'%@://%@:%@/stacks',
+    http_config: 'yarn.resourcemanager.webapp.address',
+    https_config: 'yarn.resourcemanager.webapp.https.address',
+    site: 'yarn-site',
+    regex: portRegex,
+    default_http_port: 8088,
+    default_https_port: 8090
   },
   {
     id:27,
     label:'JobHistory UI',
-    url:'%@://%@:19888',
+    url:'%@://%@:%@',
     service_id: 'MAPREDUCE2',
-    template:'%@://%@:19888'
+    template:'%@://%@:%@',
+    http_config: 'mapreduce.jobhistory.webapp.address',
+    https_config: 'mapreduce.jobhistory.webapp.https.address',
+    site: 'mapred-site',
+    regex: portRegex,
+    default_http_port: 19888
   },
   {
     id:28,
     label:'JobHistory logs',
-    url:'%@://%@:19888/logs',
+    url:'%@://%@:%@/logs',
     service_id: 'MAPREDUCE2',
-    template:'%@://%@:19888/logs'
+    template:'%@://%@:%@/logs',
+    http_config: 'mapreduce.jobhistory.webapp.address',
+    https_config: 'mapreduce.jobhistory.webapp.https.address',
+    site: 'mapred-site',
+    regex: portRegex,
+    default_http_port: 19888
   },
   {
     id:29,
     label:'JobHistory JMX',
-    url:'%@://%@:19888/jmx',
+    url:'%@://%@:%@/jmx',
     service_id: 'MAPREDUCE2',
-    template:'%@://%@:19888/jmx'
+    template:'%@://%@:%@/jmx',
+    http_config: 'mapreduce.jobhistory.webapp.address',
+    https_config: 'mapreduce.jobhistory.webapp.https.address',
+    site: 'mapred-site',
+    regex: portRegex,
+    default_http_port: 19888
   },
   {
     id:30,
     label:'Thread Stacks',
-    url:'%@://%@:19888/stacks',
+    url:'%@://%@:%@/stacks',
     service_id: 'MAPREDUCE2',
-    template:'%@://%@:19888/stacks'
+    template:'%@://%@:%@/stacks',
+    http_config: 'mapreduce.jobhistory.webapp.address',
+    https_config: 'mapreduce.jobhistory.webapp.https.address',
+    site: 'mapred-site',
+    regex: portRegex,
+    default_http_port: 19888
   }
 ];

http://git-wip-us.apache.org/repos/asf/ambari/blob/ac46ed49/ambari-web/app/views/common/quick_view_link_view.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/common/quick_view_link_view.js b/ambari-web/app/views/common/quick_view_link_view.js
index 6a72a4c..1d09e6d 100644
--- a/ambari-web/app/views/common/quick_view_link_view.js
+++ b/ambari-web/app/views/common/quick_view_link_view.js
@@ -21,8 +21,7 @@ var stringUtils = require('utils/string_utils');
 
 App.QuickViewLinks = Em.View.extend({
 
-
-  loadTags: function() {
+  loadTags: function () {
     App.ajax.send({
       name: 'config.tags.sync',
       sender: this,
@@ -31,43 +30,39 @@ App.QuickViewLinks = Em.View.extend({
     });
   },
 
-  loadTagsSuccess: function(data) {
+  loadTagsSuccess: function (data) {
     var tags = [];
-    for( var prop in data.Clusters.desired_configs){
+    for (var prop in data.Clusters.desired_configs) {
       tags.push(Em.Object.create({
         siteName: prop,
         tagName: data.Clusters.desired_configs[prop]['tag']
       }));
     }
     this.set('actualTags', tags);
-    this.getSecurityProperties();
+    this.setConfigProperties();
   },
 
   actualTags: [],
 
-  securityProperties: [],
+  configProperties: [],
 
   /**
    * list of files that contains properties for enabling/disabling ssl
    */
-  requiredSiteNames: ['core-site'],
+  requiredSiteNames: ['core-site', 'hdfs-site', 'hbase-site', 'oozie-site', 'yarn-site', 'mapred-site'],
 
-  getSecurityProperties: function () {
-    this.set('securityProperties', []);
+  setConfigProperties: function () {
+    this.set('configProperties', []);
     var requiredSiteNames = this.get('requiredSiteNames');
-    var tags = this.get('actualTags').filter(function(tag){
+    var tags = this.get('actualTags').filter(function (tag) {
       return requiredSiteNames.contains(tag.siteName);
     });
     var data = App.router.get('configurationController').getConfigsByTags(tags);
-    var properties = this.get('securityProperties');
-    var coreSiteProperties = data.findProperty('type', 'core-site');
-    if(coreSiteProperties) {
-      properties.pushObject(coreSiteProperties);
-      this.set('securityProperties', properties);
-    }
+    this.set('configProperties', data);
+
   },
 
-  ambariProperties: function() {
+  ambariProperties: function () {
     return App.router.get('clusterController.ambariProperties');
   },
   /**
@@ -75,9 +70,10 @@ App.QuickViewLinks = Em.View.extend({
    */
   quickLinks: [],
 
-  didInsertElement: function() {
+  didInsertElement: function () {
     this.setQuickLinks();
   },
+
   setQuickLinks: function () {
     this.loadTags();
     var serviceName = this.get('content.serviceName');
@@ -88,13 +84,13 @@ App.QuickViewLinks = Em.View.extend({
     var quickLinks = [];
     switch (serviceName) {
       case "HDFS":
-        if ( this.get('content.snameNode')) { // not HA
+        if (this.get('content.snameNode')) { // not HA
           host = App.singleNodeInstall ? App.singleNodeAlias : components.findProperty('componentName', 'NAMENODE').get('host.publicHostName');
         } else {
           // HA
           if (this.get('content.activeNameNode')) {
             host = this.get('content.activeNameNode.publicHostName');
-          }else {
+          } else {
             host = 'noActiveNN';
           }
         }
@@ -137,37 +133,32 @@ App.QuickViewLinks = Em.View.extend({
         }
       ];
     } else {
-    quickLinks = this.get('content.quickLinks').map(function (item) {
-      if (host == 'noActiveNN') {
-        item.set('disabled', true);
-      } else {
-        item.set('disabled', false);
-        var protocol = self.setProtocol(item.get('service_id'));
-        if (item.get('template')) {
-          if(item.get('service_id') === 'YARN'){
-            var port = self.setPort(item.get('service_id'),protocol, version);
-            item.set('url', item.get('template').fmt(protocol,host,port));
-          } else {
-            item.set('url', item.get('template').fmt(protocol,host));
+      quickLinks = this.get('content.quickLinks').map(function (item) {
+        if (host == 'noActiveNN') {
+          item.set('disabled', true);
+        } else {
+          item.set('disabled', false);
+          var protocol = self.setProtocol(item.get('service_id'));
+          if (item.get('template')) {
+            var port = item.get('http_config') && self.setPort(item, protocol, version);
+            item.set('url', item.get('template').fmt(protocol, host, port));
           }
         }
-      }
-      return item;
-    });
+        return item;
+      });
     }
-    this.set('quickLinks',quickLinks);
-  }.observes('App.currentStackVersionNumber', 'App.router.mainAdminSecurityController.securityEnabled'),
+    this.set('quickLinks', quickLinks);
+  }.observes('App.currentStackVersionNumber', 'App.singleNodeInstall'),
 
-  setProtocol: function(service_id){
-    var properties  = this.ambariProperties();
-    var securityProperties = this.get('securityProperties');
+  setProtocol: function (service_id) {
+    var properties = this.ambariProperties();
+    var configProperties = this.get('configProperties');
     var hadoopSslEnabled = false;
-    if(securityProperties) {
-      securityProperties.forEach(function(property){
-        property['hadoop.ssl.enabled'] && property['hadoop.ssl.enabled'] === 'true' ?  hadoopSslEnabled = true : null;
-      });
+    if (configProperties) {
+      var site = configProperties.findProperty('type', 'core-site');
+      site.properties['hadoop.ssl.enabled'] && site.properties['hadoop.ssl.enabled'] === 'true' ? hadoopSslEnabled = true : null;
     }
-    switch(service_id){
+    switch (service_id) {
       case "GANGLIA":
         return (properties && properties.hasOwnProperty('ganglia.https') && properties['ganglia.https']) ? "https" : "http";
         break;
@@ -175,10 +166,30 @@ App.QuickViewLinks = Em.View.extend({
         return (properties && properties.hasOwnProperty('nagios.https') && properties['nagios.https']) ? "https" : "http";
         break;
       case "HDFS":
-      case "YARN":
+      case "HBASE":
       case "MAPREDUCE":
+        return hadoopSslEnabled ? "https" : "http";
+        break;
+      case "YARN":
+        var yarnProperties = configProperties.findProperty('type', 'yarn-site');
+        if (yarnProperties && yarnProperties.properties) {
+          if (yarnProperties.properties['yarn.http.policy'] === 'HTTPS_ONLY') {
+            return "https";
+          } else if (yarnProperties.properties['yarn.http.policy'] === 'HTTP_ONLY') {
+            return "http";
+          }
+        }
+        return hadoopSslEnabled ? "https" : "http";
+        break;
       case "MAPREDUCE2":
-      case "HBASE":
+        var mapred2Properties = configProperties.findProperty('type', 'mapred-site');
+        if (mapred2Properties && mapred2Properties.properties) {
+          if (mapred2Properties.properties['mapreduce.jobhistory.http.policy'] === 'HTTPS_ONLY') {
+            return "https";
+          } else if (mapred2Properties.properties['mapreduce.jobhistory.http.policy'] === 'HTTP_ONLY') {
+            return "http";
+          }
+        }
         return hadoopSslEnabled ? "https" : "http";
         break;
       default:
@@ -186,12 +197,27 @@ App.QuickViewLinks = Em.View.extend({
     }
   },
 
-  setPort: function(service_id, protocol, version) {
-    var port = '';
-    if (service_id === 'YARN') {
-      port = (protocol === 'https' && stringUtils.compareVersions(version,'2.0.5') === 1) ? '8090' : '8088'
+  setPort: function (item, protocol, version) {
+    var service_id = item.get('service_id');
+    var configProperties = this.get('configProperties');
+    var config = item.get('http_config');
+    var defaultPort = item.get('default_http_port');
+    if (protocol === 'https' && item.get('https_config')) {
+      config = item.get('https_config');
+      if (item.get('default_https_port')) {
+        defaultPort = item.get('default_https_port');
+      }
     }
-    return port;
+    var site = configProperties.findProperty('type', item.get('site'));
+    var propertyValue = site && site.properties[config];
+    if (!propertyValue) {
+      return defaultPort;
+    }
+
+    var re = new RegExp(item.get('regex'));
+
+    var portValue = propertyValue.match(re);
+    return  portValue[1];
   },
 
   linkTarget: function () {