Repository: ambari
Updated Branches:
  refs/heads/branch-2.4 01b02b279 -> 342d392b6


AMBARI-17195. HiveServer2 Interactive UI Quicklink related issues (akovalenko)


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

Branch: refs/heads/branch-2.4
Commit: 342d392b686e6309e8ec0009843057094a5d921b
Parents: 01b02b2
Author: Aleksandr Kovalenko <[email protected]>
Authored: Mon Jun 13 17:36:02 2016 +0300
Committer: Aleksandr Kovalenko <[email protected]>
Committed: Tue Jun 14 13:53:49 2016 +0300

----------------------------------------------------------------------
 ambari-web/app/controllers/global/cluster_controller.js |  9 +++++++++
 ambari-web/app/mappers/components_state_mapper.js       | 11 ++++++++++-
 ambari-web/app/mappers/service_metrics_mapper.js        | 12 ++++++++++--
 ambari-web/app/mixins/common/configs/configs_saver.js   |  5 ++---
 ambari-web/app/views/common/quick_view_link_view.js     |  6 +++++-
 5 files changed, 36 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/342d392b/ambari-web/app/controllers/global/cluster_controller.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/global/cluster_controller.js 
b/ambari-web/app/controllers/global/cluster_controller.js
index d8a3664..0d9d41d 100644
--- a/ambari-web/app/controllers/global/cluster_controller.js
+++ b/ambari-web/app/controllers/global/cluster_controller.js
@@ -49,6 +49,11 @@ App.ClusterController = 
Em.Controller.extend(App.ReloadPopupMixin, {
   isHostComponentMetricsLoaded: false,
 
   /**
+   * This counter used as event trigger to notify that quick links should be 
changed.
+   */
+  quickLinksUpdateCounter: 0,
+
+  /**
    * Ambari uses custom jdk.
    * @type {Boolean}
    */
@@ -488,5 +493,9 @@ App.ClusterController = 
Em.Controller.extend(App.ReloadPopupMixin, {
       name: 'cluster.load_last_upgrade',
       sender: this
     });
+  },
+
+  triggerQuickLinksUpdate: function() {
+    this.incrementProperty('quickLinksUpdateCounter');
   }
 });

http://git-wip-us.apache.org/repos/asf/ambari/blob/342d392b/ambari-web/app/mappers/components_state_mapper.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/mappers/components_state_mapper.js 
b/ambari-web/app/mappers/components_state_mapper.js
index eb9ebd5..3ad8e49 100644
--- a/ambari-web/app/mappers/components_state_mapper.js
+++ b/ambari-web/app/mappers/components_state_mapper.js
@@ -164,8 +164,13 @@ App.componentsStateMapper = App.QuickDataMapper.create({
     var clients = [];
     var slaves = [];
     var masters = [];
+    var hasNewComponents = false;
 
     if (json.items) {
+      if (!App.isEmptyObject(Em.getWithDefault(App, 'cache.services', {}))) {
+        hasNewComponents = 
json.items.mapProperty('ServiceComponentInfo.total_count').reduce(Em.sum, 0) >
+          
App.cache.services.mapProperty('host_components.length').reduce(Em.sum, 0);
+      }
       json.items.forEach(function (item) {
         var componentConfig = 
this.getComponentConfig(item.ServiceComponentInfo.component_name);
         var parsedItem = this.parseIt(item, componentConfig);
@@ -198,12 +203,16 @@ App.componentsStateMapper = App.QuickDataMapper.create({
             }
           }
         }
-      }, this)
+      }, this);
     }
     App.store.loadMany(this.clientModel, clients);
     App.store.loadMany(this.slaveModel, slaves);
     App.store.loadMany(this.masterModel, masters);
 
+    if (hasNewComponents) {
+      App.get('router.clusterController').triggerQuickLinksUpdate();
+    }
+
     console.timeEnd('App.componentsStateMapper execution time');
   }
 });

http://git-wip-us.apache.org/repos/asf/ambari/blob/342d392b/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 d862df7..bf4fc91 100644
--- a/ambari-web/app/mappers/service_metrics_mapper.js
+++ b/ambari-web/app/mappers/service_metrics_mapper.js
@@ -180,6 +180,7 @@ App.serviceMetricsMapper = App.QuickDataMapper.create({
       var hostComponents = [];
       var services = App.cache['services'];
       var previousComponentStatuses = App.cache['previousComponentStatuses'];
+      var lastKnownStatusesLength = Em.keys(previousComponentStatuses).length;
       var previousComponentPassiveStates = 
App.cache['previousComponentPassiveStates'];
       var result = [];
       var advancedHostComponents = [];
@@ -199,8 +200,8 @@ App.serviceMetricsMapper = App.QuickDataMapper.create({
         component.host_components.forEach(function (host_component) {
           var id = host_component.HostRoles.component_name + "_" + 
host_component.HostRoles.host_name;
           hostComponentIdsMap[id] = true;
-          previousComponentStatuses[host_component.id] = 
host_component.HostRoles.state;
-          previousComponentPassiveStates[host_component.id] = 
host_component.HostRoles.maintenance_state;
+          previousComponentStatuses[id] = host_component.HostRoles.state;
+          previousComponentPassiveStates[id] = 
host_component.HostRoles.maintenance_state;
           this.config3.ha_status = host_component.HostRoles.component_name == 
"HBASE_MASTER" ?
             'metrics.hbase.master.IsActiveMaster' : 'HostRoles.ha_state';
           var comp = this.parseIt(host_component, this.config3);
@@ -252,6 +253,13 @@ App.serviceMetricsMapper = App.QuickDataMapper.create({
 
       //load services to model
       App.store.loadMany(this.get('model'), result);
+
+      // check for new components
+      if (lastKnownStatusesLength > 0) {
+        if (lastKnownStatusesLength < 
Em.keys(App.cache.previousComponentStatuses).length) {
+          App.get('router.clusterController').triggerQuickLinksUpdate();
+        }
+      }
     }
     console.timeEnd('App.serviceMetricsMapper execution time');
   },

http://git-wip-us.apache.org/repos/asf/ambari/blob/342d392b/ambari-web/app/mixins/common/configs/configs_saver.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/mixins/common/configs/configs_saver.js 
b/ambari-web/app/mixins/common/configs/configs_saver.js
index 8d2869c..f486180 100644
--- a/ambari-web/app/mixins/common/configs/configs_saver.js
+++ b/ambari-web/app/mixins/common/configs/configs_saver.js
@@ -690,9 +690,8 @@ App.ConfigsSaverMixin = Em.Mixin.create({
       messageClass = 'alert alert-error';
       value = result.value;
     }
-    if(currentService){
-      App.QuickViewLinks.proto().set('content', currentService);
-      App.QuickViewLinks.proto().loadTags();
+    if (currentService){
+      App.get('router.clusterController').triggerQuickLinksUpdate();
     }
 
     //  update configs for service actions

http://git-wip-us.apache.org/repos/asf/ambari/blob/342d392b/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 b5567c2..3ef68d5 100644
--- a/ambari-web/app/views/common/quick_view_link_view.js
+++ b/ambari-web/app/views/common/quick_view_link_view.js
@@ -109,7 +109,8 @@ App.QuickViewLinks = Em.View.extend({
     'App.currentStackVersionNumber',
     'App.singleNodeInstall',
     'App.router.clusterController.isServiceMetricsLoaded',
-    'App.router.clusterController.isHostComponentMetricsLoaded'
+    'App.router.clusterController.isHostComponentMetricsLoaded',
+    'App.router.clusterController.quickLinksUpdateCounter'
   ),
 
   /**
@@ -410,6 +411,9 @@ App.QuickViewLinks = Em.View.extend({
             protocol = this.setProtocol(configProperties, link.protocol);
           }
         }
+        if (componentName && !hostNameForComponent) {
+          return;
+        }
         var newItem = this.getHostLink(link, publicHostName, protocol, 
configProperties, response); //quicklink generated for the hbs template
         if (!Em.isNone(newItem)) {
           quickLinks.push(newItem);

Reply via email to