AMBARI-7441. Slider app component should link to the exact YARN container (srimanth)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/061dc10c Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/061dc10c Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/061dc10c Branch: refs/heads/branch-alerts-dev Commit: 061dc10c6cf5dc5e3c585e3710d1e7d13e84b5aa Parents: 4010ff4 Author: Srimanth Gunturi <sgunt...@hortonworks.com> Authored: Mon Sep 22 18:34:17 2014 -0700 Committer: Srimanth Gunturi <sgunt...@hortonworks.com> Committed: Mon Sep 22 18:34:23 2014 -0700 ---------------------------------------------------------------------- .../view/slider/SliderAppsViewController.java | 1 + .../rest/client/SliderAppMasterClient.java | 2 +- .../ui/app/mappers/slider_apps_mapper.js | 9 +++++++-- .../ui/app/models/slider_app_component.js | 16 ++++++++++++++- .../src/main/resources/ui/app/routes/main.js | 21 ++++++++++---------- .../ui/app/templates/slider_app/summary.hbs | 8 +++++++- .../views/slider/src/main/resources/view.xml | 7 ++++++- 7 files changed, 48 insertions(+), 16 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/061dc10c/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/SliderAppsViewController.java ---------------------------------------------------------------------- diff --git a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/SliderAppsViewController.java b/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/SliderAppsViewController.java index 0cf5d15..f06e8f3 100644 --- a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/SliderAppsViewController.java +++ b/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/SliderAppsViewController.java @@ -33,6 +33,7 @@ public interface SliderAppsViewController { public static final String PROPERTY_HDFS_ADDRESS = "hdfs.address"; public static final String PROPERTY_YARN_RM_ADDRESS = "yarn.resourcemanager.address"; + public static final String PROPERTY_YARN_RM_WEBAPP_ADDRESS = "yarn.resourcemanager.webapp.address"; public static final String PROPERTY_YARN_RM_SCHEDULER_ADDRESS = "yarn.resourcemanager.scheduler.address"; public static final String PROPERTY_ZK_QUOROM = "zookeeper.quorum"; public static final String PROPERTY_GANGLIA_SERVER_HOSTNAME = "ganglia.server.hostname"; http://git-wip-us.apache.org/repos/asf/ambari/blob/061dc10c/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/client/SliderAppMasterClient.java ---------------------------------------------------------------------- diff --git a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/client/SliderAppMasterClient.java b/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/client/SliderAppMasterClient.java index 8bc7400..fc8f0d7 100644 --- a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/client/SliderAppMasterClient.java +++ b/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/client/SliderAppMasterClient.java @@ -99,7 +99,7 @@ public class SliderAppMasterClient extends BaseHttpClient { quickLinks.put("JMX", entry.getValue().getAsString()); } else if ("org.apache.slider.monitor".equals(entry.getKey())) { quickLinks.put("UI", entry.getValue().getAsString()); - } else if ("app.metrics".equals(entry.getKey())) { + } else if ("org.apache.slider.metrics".equals(entry.getKey())) { quickLinks.put("Metrics", entry.getValue().getAsString()); } else { quickLinks.put(entry.getKey(), entry.getValue().getAsString()); http://git-wip-us.apache.org/repos/asf/ambari/blob/061dc10c/contrib/views/slider/src/main/resources/ui/app/mappers/slider_apps_mapper.js ---------------------------------------------------------------------- diff --git a/contrib/views/slider/src/main/resources/ui/app/mappers/slider_apps_mapper.js b/contrib/views/slider/src/main/resources/ui/app/mappers/slider_apps_mapper.js index d7853f4..3cf80cc 100644 --- a/contrib/views/slider/src/main/resources/ui/app/mappers/slider_apps_mapper.js +++ b/contrib/views/slider/src/main/resources/ui/app/mappers/slider_apps_mapper.js @@ -92,6 +92,7 @@ App.SliderAppsMapper = App.Mapper.createWithMixins(App.RunPeriodically, { id: appId + component.componentName + i, status: activeContainers[i] ? "Running" : "Stopped", host: activeContainers[i] ? component.activeContainers[activeContainers[i]].host : "", + containerId: activeContainers[i] ? component.activeContainers[activeContainers[i]].name : "", componentName: component.componentName, appId: appId }) @@ -135,8 +136,12 @@ App.SliderAppsMapper = App.Mapper.createWithMixins(App.RunPeriodically, { yarnAppId += appId.substring(index + 1); } var yarnUI = "http://"+window.location.hostname+":8088"; - if (App.viewUrls) { - yarnUI = App.viewUrls['yarn.resourcemanager.webapp.address']; + var viewConfigs = App.SliderApp.store.all('sliderConfig'); + if (viewConfigs!=null) { + var viewConfig = viewConfigs.findBy('viewConfigName', 'yarn.resourcemanager.webapp.address'); + if (viewConfig!=null) { + yarnUI = viewConfig.get('value'); + } } quickLinks.push( Ember.Object.create({ http://git-wip-us.apache.org/repos/asf/ambari/blob/061dc10c/contrib/views/slider/src/main/resources/ui/app/models/slider_app_component.js ---------------------------------------------------------------------- diff --git a/contrib/views/slider/src/main/resources/ui/app/models/slider_app_component.js b/contrib/views/slider/src/main/resources/ui/app/models/slider_app_component.js index 2e999c1..6a577c2 100644 --- a/contrib/views/slider/src/main/resources/ui/app/models/slider_app_component.js +++ b/contrib/views/slider/src/main/resources/ui/app/models/slider_app_component.js @@ -34,6 +34,11 @@ App.SliderAppComponent = DS.Model.extend({ componentName: DS.attr('string'), /** + * @type {string} + */ + containerId: DS.attr('string'), + + /** * @type {App.SliderApp} */ appId: DS.belongsTo('sliderApp'), @@ -44,7 +49,16 @@ App.SliderAppComponent = DS.Model.extend({ */ isRunning: function() { return this.get('status') === 'Running'; - }.property('status') + }.property('status'), + + url: function() { + var host = this.get('host'); + var containerId = this.get('containerId'); + if (host != null && containerId != null) { + return "http://" + this.get('host') + ":8042/node/container/" + this.get('containerId'); + } + return null; + }.property('host', 'containerId') }); http://git-wip-us.apache.org/repos/asf/ambari/blob/061dc10c/contrib/views/slider/src/main/resources/ui/app/routes/main.js ---------------------------------------------------------------------- diff --git a/contrib/views/slider/src/main/resources/ui/app/routes/main.js b/contrib/views/slider/src/main/resources/ui/app/routes/main.js index 7afc85a..9388f2a 100644 --- a/contrib/views/slider/src/main/resources/ui/app/routes/main.js +++ b/contrib/views/slider/src/main/resources/ui/app/routes/main.js @@ -54,16 +54,17 @@ App.SliderAppsRoute = Ember.Route.extend({ App.SliderApp.store.pushMany('sliderConfig', Em.A([ Em.Object.create({id: 1, required: true, viewConfigName: 'hdfs.address', displayName: 'hdfsAddress', linkedService: 'HDFS'}), Em.Object.create({id: 2, required: true, viewConfigName: 'yarn.resourcemanager.address', displayName: 'yarnResourceManager', linkedService: 'YARN'}), - Em.Object.create({id: 3, required: true, viewConfigName: 'yarn.resourcemanager.scheduler.address', displayName: 'yarnResourceManagerScheduler'}), - Em.Object.create({id: 4, required: true, viewConfigName: 'zookeeper.quorum', displayName: 'zookeeperQuorum', linkedService: 'ZOOKEEPER'}), - Em.Object.create({id: 5, required: false, viewConfigName: 'ganglia.server.hostname', displayName: 'gangliaServer'}), - Em.Object.create({id: 6, required: false, viewConfigName: 'ganglia.custom.clusters', displayName: 'gangliaClusters'}), - Em.Object.create({id: 7, required: false, viewConfigName: 'slider.user', displayName: 'sliderUser'}), - Em.Object.create({id: 8, required: false, viewConfigName: 'slider.security.enabled', displayName: 'sliderSecurityEnabled'}), - Em.Object.create({id: 9, required: false, requireDependsOn: 8, viewConfigName: 'yarn.resourcemanager.principal', displayName: 'yarnResourceManagerPrincipal'}), - Em.Object.create({id: 10, required: false, requireDependsOn: 8, viewConfigName: 'dfs.namenode.kerberos.principal', displayName: 'dfsNamenodeKerberosPrincipal'}), - Em.Object.create({id: 11, required: false, requireDependsOn: 8, viewConfigName: 'view.kerberos.principal', displayName: 'viewKerberosPrincipal'}), - Em.Object.create({id: 12, required: false, requireDependsOn: 8, viewConfigName: 'view.kerberos.principal.keytab', displayName: 'ViewKerberosPrincipalKeytab'}) + Em.Object.create({id: 3, required: true, viewConfigName: 'yarn.resourcemanager.webapp.address', displayName: 'yarnResourceManagerWebapp', linkedService: 'YARN'}), + Em.Object.create({id: 4, required: true, viewConfigName: 'yarn.resourcemanager.scheduler.address', displayName: 'yarnResourceManagerScheduler'}), + Em.Object.create({id: 5, required: true, viewConfigName: 'zookeeper.quorum', displayName: 'zookeeperQuorum', linkedService: 'ZOOKEEPER'}), + Em.Object.create({id: 6, required: false, viewConfigName: 'ganglia.server.hostname', displayName: 'gangliaServer'}), + Em.Object.create({id: 7, required: false, viewConfigName: 'ganglia.custom.clusters', displayName: 'gangliaClusters'}), + Em.Object.create({id: 8, required: false, viewConfigName: 'slider.user', displayName: 'sliderUser'}), + Em.Object.create({id: 9, required: true, viewConfigName: 'slider.security.enabled', displayName: 'sliderSecurityEnabled'}), + Em.Object.create({id: 10, required: false, requireDependsOn: 9, viewConfigName: 'yarn.resourcemanager.principal', displayName: 'yarnResourceManagerPrincipal'}), + Em.Object.create({id: 11, required: false, requireDependsOn: 9, viewConfigName: 'dfs.namenode.kerberos.principal', displayName: 'dfsNamenodeKerberosPrincipal'}), + Em.Object.create({id: 12, required: false, requireDependsOn: 9, viewConfigName: 'view.kerberos.principal', displayName: 'viewKerberosPrincipal'}), + Em.Object.create({id: 13, required: false, requireDependsOn: 9, viewConfigName: 'view.kerberos.principal.keytab', displayName: 'ViewKerberosPrincipalKeytab'}) ])); }, http://git-wip-us.apache.org/repos/asf/ambari/blob/061dc10c/contrib/views/slider/src/main/resources/ui/app/templates/slider_app/summary.hbs ---------------------------------------------------------------------- diff --git a/contrib/views/slider/src/main/resources/ui/app/templates/slider_app/summary.hbs b/contrib/views/slider/src/main/resources/ui/app/templates/slider_app/summary.hbs index 8bf043c..96340f9 100644 --- a/contrib/views/slider/src/main/resources/ui/app/templates/slider_app/summary.hbs +++ b/contrib/views/slider/src/main/resources/ui/app/templates/slider_app/summary.hbs @@ -59,7 +59,13 @@ {{#each controller.model.components}} <tr> <td><span {{bind-attr class="isRunning:icon-ok-sign:icon-warning-sign :status"}}></span> {{componentName}}</td> - <td>{{host}}</td> + <td> + {{#if url}} + <a {{bind-attr href="url"}} target="_blank">{{host}}</a> + {{else}} + {{host}} + {{/if}} + </td> </tr> {{/each}} </tbody> http://git-wip-us.apache.org/repos/asf/ambari/blob/061dc10c/contrib/views/slider/src/main/resources/view.xml ---------------------------------------------------------------------- diff --git a/contrib/views/slider/src/main/resources/view.xml b/contrib/views/slider/src/main/resources/view.xml index 7a05fa3..8325529 100644 --- a/contrib/views/slider/src/main/resources/view.xml +++ b/contrib/views/slider/src/main/resources/view.xml @@ -20,7 +20,7 @@ limitations under the License. Kerberos, LDAP, Custom. Binary/Htt <version>1.0.0</version> <parameter> <name>hdfs.address</name> - <description>The URL to access HDFS service via its protocol. Typically this is the fs.defaultFS property in the core-site.xml configuration. For example: hdfs://hdfs.namenode.host:8020.</description> + <description>The URL to access HDFS service via its protocol. Typically this is the fs.defaultFS property in the core-site.xml configuration file. For example: hdfs://hdfs.namenode.host:8020.</description> <required>true</required> </parameter> <parameter> @@ -29,6 +29,11 @@ limitations under the License. Kerberos, LDAP, Custom. Binary/Htt <required>true</required> </parameter> <parameter> + <name>yarn.resourcemanager.webapp.address</name> + <description>The URL to the YARN ResourceManager Web Application, used to provide YARN UI. Typically this is the yarn.resourcemanager.webapp.address config from yarn-site.xml configuration file. For example: http://yarn.resourcemanager.host:8088</description> + <required>true</required> + </parameter> + <parameter> <name>yarn.resourcemanager.scheduler.address</name> <description>The URL to the YARN ResourceManager Scheduler, which schedules YARN Applications. For example: http://yarn.resourcemanager.host:8030</description> <required>true</required>