Repository: ambari
Updated Branches:
  refs/heads/trunk dc27f4a08 -> 954a70409


AMBARI-6031. Implement filtering of digit fields with predicates. (akovalenko)


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

Branch: refs/heads/trunk
Commit: 954a7040961603b610a4298cd277d3c31c383099
Parents: dc27f4a
Author: Aleksandr Kovalenko <[email protected]>
Authored: Thu Jun 5 17:29:01 2014 +0300
Committer: Aleksandr Kovalenko <[email protected]>
Committed: Thu Jun 5 17:29:01 2014 +0300

----------------------------------------------------------------------
 .../app/controllers/global/update_controller.js |  96 +++++++-------
 ambari-web/app/controllers/main/host.js         | 128 ++++++++++++++-----
 2 files changed, 148 insertions(+), 76 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/954a7040/ambari-web/app/controllers/global/update_controller.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/global/update_controller.js 
b/ambari-web/app/controllers/global/update_controller.js
index eddae94..2c7bf29 100644
--- a/ambari-web/app/controllers/global/update_controller.js
+++ b/ambari-web/app/controllers/global/update_controller.js
@@ -69,13 +69,15 @@ App.UpdateController = Em.Controller.extend({
         case 'PLAIN':
           params += param.key + '=' + param.value;
           break;
+        case 'LESS':
+          params += param.key + '<' + param.value;
+          break;
+        case 'MORE':
+          params += param.key + '>' + param.value;
+          break;
         case 'MATCH':
           params += param.key + '.matches(' + param.value + ')';
           break;
-        case 'NUMBER':
-          //TODO should be added predicates of comparison (<,>,=)
-          params += param.key + '=' + param.value;
-          break;
         case 'MULTIPLE':
           params += param.key + '.in(' + param.value.join(',') + ')';
           break;
@@ -153,9 +155,9 @@ App.UpdateController = Em.Controller.extend({
   updateHost: function (callback) {
     var testUrl = App.get('isHadoop2Stack') ? '/data/hosts/HDP2/hosts.json' : 
'/data/hosts/hosts.json';
     var realUrl = 
'/hosts?<parameters>fields=Hosts/host_name,Hosts/maintenance_state,Hosts/public_host_name,Hosts/cpu_count,Hosts/ph_cpu_count,Hosts/total_mem,'
 +
-      
'Hosts/host_status,Hosts/last_heartbeat_time,Hosts/os_arch,Hosts/os_type,Hosts/ip,host_components/HostRoles/state,host_components/HostRoles/maintenance_state,'
 +
-      
'metrics/disk,metrics/load/load_one,metrics/cpu/cpu_system,metrics/cpu/cpu_user,'
 +
-      
'metrics/memory/mem_total,metrics/memory/mem_free,alerts/summary&minimal_response=true';
+        
'Hosts/host_status,Hosts/last_heartbeat_time,Hosts/os_arch,Hosts/os_type,Hosts/ip,host_components/HostRoles/state,host_components/HostRoles/maintenance_state,'
 +
+        
'metrics/disk,metrics/load/load_one,metrics/cpu/cpu_system,metrics/cpu/cpu_user,'
 +
+        
'metrics/memory/mem_total,metrics/memory/mem_free,alerts/summary&minimal_response=true';
 
     this.get('queryParams').set('Hosts', 
App.router.get('mainHostController').getQueryParameters());
     var hostsUrl = this.getComplexUrl(testUrl, realUrl, 
this.get('queryParams.Hosts'));
@@ -197,32 +199,32 @@ App.UpdateController = Em.Controller.extend({
     var isFlumeInstalled = 
App.cache['services'].mapProperty('ServiceInfo.service_name').contains('FLUME');
     var flumeHandlerParam = isFlumeInstalled ? 
'ServiceComponentInfo/component_name=FLUME_HANDLER|' : '';
     var realUrl = '/components/?' + flumeHandlerParam +
-      'ServiceComponentInfo/category=MASTER&fields=' +
-      'ServiceComponentInfo/Version,' +
-      'ServiceComponentInfo/StartTime,' +
-      'ServiceComponentInfo/HeapMemoryUsed,' +
-      'ServiceComponentInfo/HeapMemoryMax,' +
-      'ServiceComponentInfo/service_name,' +
-      'host_components/HostRoles/host_name,' +
-      'host_components/HostRoles/state,' +
-      'host_components/HostRoles/maintenance_state,' +
-      'host_components/HostRoles/stale_configs,' +
-      'host_components/metrics/jvm/memHeapUsedM,' +
-      'host_components/metrics/jvm/HeapMemoryMax,' +
-      'host_components/metrics/jvm/HeapMemoryUsed,' +
-      'host_components/metrics/jvm/memHeapCommittedM,' +
-      'host_components/metrics/mapred/jobtracker/trackers_decommissioned,' +
-      'host_components/metrics/cpu/cpu_wio,' +
-      'host_components/metrics/rpc/RpcQueueTime_avg_time,' +
-      'host_components/metrics/dfs/FSNamesystem/*,' +
-      'host_components/metrics/dfs/namenode/Version,' +
-      'host_components/metrics/dfs/namenode/DecomNodes,' +
-      'host_components/metrics/dfs/namenode/TotalFiles,' +
-      'host_components/metrics/dfs/namenode/UpgradeFinalized,' +
-      'host_components/metrics/dfs/namenode/Safemode,' +
-      'host_components/metrics/runtime/StartTime' +
-      conditionalFieldsString +
-      '&minimal_response=true';
+        'ServiceComponentInfo/category=MASTER&fields=' +
+        'ServiceComponentInfo/Version,' +
+        'ServiceComponentInfo/StartTime,' +
+        'ServiceComponentInfo/HeapMemoryUsed,' +
+        'ServiceComponentInfo/HeapMemoryMax,' +
+        'ServiceComponentInfo/service_name,' +
+        'host_components/HostRoles/host_name,' +
+        'host_components/HostRoles/state,' +
+        'host_components/HostRoles/maintenance_state,' +
+        'host_components/HostRoles/stale_configs,' +
+        'host_components/metrics/jvm/memHeapUsedM,' +
+        'host_components/metrics/jvm/HeapMemoryMax,' +
+        'host_components/metrics/jvm/HeapMemoryUsed,' +
+        'host_components/metrics/jvm/memHeapCommittedM,' +
+        'host_components/metrics/mapred/jobtracker/trackers_decommissioned,' +
+        'host_components/metrics/cpu/cpu_wio,' +
+        'host_components/metrics/rpc/RpcQueueTime_avg_time,' +
+        'host_components/metrics/dfs/FSNamesystem/*,' +
+        'host_components/metrics/dfs/namenode/Version,' +
+        'host_components/metrics/dfs/namenode/DecomNodes,' +
+        'host_components/metrics/dfs/namenode/TotalFiles,' +
+        'host_components/metrics/dfs/namenode/UpgradeFinalized,' +
+        'host_components/metrics/dfs/namenode/Safemode,' +
+        'host_components/metrics/runtime/StartTime' +
+        conditionalFieldsString +
+        '&minimal_response=true';
 
     var servicesUrl = this.getUrl(testUrl, realUrl);
     callback = callback || function () {
@@ -242,22 +244,22 @@ App.UpdateController = Em.Controller.extend({
     var conditionalFields = [];
     var serviceSpecificParams = {
       'FLUME': "host_components/metrics/flume/flume," +
-         "host_components/processes/HostComponentProcess",
+          "host_components/processes/HostComponentProcess",
       'YARN': "host_components/metrics/yarn/Queue," +
-        "ServiceComponentInfo/rm_metrics/cluster/activeNMcount," +
-        "ServiceComponentInfo/rm_metrics/cluster/unhealthyNMcount," +
-        "ServiceComponentInfo/rm_metrics/cluster/rebootedNMcount," +
-        "ServiceComponentInfo/rm_metrics/cluster/decommissionedNMcount",
+          "ServiceComponentInfo/rm_metrics/cluster/activeNMcount," +
+          "ServiceComponentInfo/rm_metrics/cluster/unhealthyNMcount," +
+          "ServiceComponentInfo/rm_metrics/cluster/rebootedNMcount," +
+          "ServiceComponentInfo/rm_metrics/cluster/decommissionedNMcount",
       'HBASE': "host_components/metrics/hbase/master/IsActiveMaster," +
-        "ServiceComponentInfo/MasterStartTime," +
-        "ServiceComponentInfo/MasterActiveTime," +
-        "ServiceComponentInfo/AverageLoad," +
-        "ServiceComponentInfo/Revision," +
-        "ServiceComponentInfo/RegionsInTransition",
+          "ServiceComponentInfo/MasterStartTime," +
+          "ServiceComponentInfo/MasterActiveTime," +
+          "ServiceComponentInfo/AverageLoad," +
+          "ServiceComponentInfo/Revision," +
+          "ServiceComponentInfo/RegionsInTransition",
       'MAPREDUCE': "ServiceComponentInfo/AliveNodes," +
-        "ServiceComponentInfo/GrayListedNodes," +
-        "ServiceComponentInfo/BlackListedNodes," +
-        "ServiceComponentInfo/jobtracker/*,",
+          "ServiceComponentInfo/GrayListedNodes," +
+          "ServiceComponentInfo/BlackListedNodes," +
+          "ServiceComponentInfo/jobtracker/*,",
       'STORM': "metrics/api/cluster/summary,"
     };
     var services = App.cache['services'];
@@ -286,7 +288,7 @@ App.UpdateController = Em.Controller.extend({
   updateComponentsState: function (callback) {
     var testUrl = '/data/services/HDP2/components_state.json';
     var realUrl = 
'/components/?ServiceComponentInfo/category.in(SLAVE,CLIENT)&fields=ServiceComponentInfo/service_name,'
 +
-      
'ServiceComponentInfo/installed_count,ServiceComponentInfo/started_count,ServiceComponentInfo/total_count&minimal_response=true';
+        
'ServiceComponentInfo/installed_count,ServiceComponentInfo/started_count,ServiceComponentInfo/total_count&minimal_response=true';
     var url = this.getUrl(testUrl, realUrl);
 
     App.HttpClient.get(url, App.componentsStateMapper, {

http://git-wip-us.apache.org/repos/asf/ambari/blob/954a7040/ambari-web/app/controllers/main/host.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/main/host.js 
b/ambari-web/app/controllers/main/host.js
index b398e8a..d95f251 100644
--- a/ambari-web/app/controllers/main/host.js
+++ b/ambari-web/app/controllers/main/host.js
@@ -33,7 +33,7 @@ App.MainHostController = 
Em.ArrayController.extend(App.UserPref, {
    * Components which will be shown in component filter
    * @returns {Array}
    */
-  componentsForFilter:function() {
+  componentsForFilter: function () {
     var installedComponents = componentHelper.getInstalledComponents();
     installedComponents.setEach('checkedForHostFilter', false);
     return installedComponents;
@@ -43,7 +43,7 @@ App.MainHostController = 
Em.ArrayController.extend(App.UserPref, {
    * Master components
    * @returns {Array}
    */
-  masterComponents:function () {
+  masterComponents: function () {
     return this.get('componentsForFilter').filterProperty('isMaster', true);
   }.property('componentsForFilter'),
 
@@ -51,7 +51,7 @@ App.MainHostController = 
Em.ArrayController.extend(App.UserPref, {
    * Slave components
    * @returns {Array}
    */
-  slaveComponents:function () {
+  slaveComponents: function () {
     return this.get('componentsForFilter').filterProperty('isSlave', true);
   }.property('componentsForFilter'),
 
@@ -59,7 +59,7 @@ App.MainHostController = 
Em.ArrayController.extend(App.UserPref, {
    * Client components
    * @returns {Array}
    */
-  clientComponents: function() {
+  clientComponents: function () {
     return this.get('componentsForFilter').filterProperty('isClient', true);
   }.property('componentsForFilter'),
 
@@ -86,12 +86,12 @@ App.MainHostController = 
Em.ArrayController.extend(App.UserPref, {
     {
       key: 'memoryFormatted',
       alias: 'Hosts/total_mem',
-      type: 'NUMBER'
+      type: 'PLAIN'
     },
     {
       key: 'loadAvg',
       alias: 'metrics/load/load_one',
-      type: 'NUMBER'
+      type: 'PLAIN'
     },
     {
       key: 'hostComponents',
@@ -217,13 +217,22 @@ App.MainHostController = 
Em.ArrayController.extend(App.UserPref, {
 
     savedFilterConditions.forEach(function (filter) {
       var property = filterProperties.findProperty('key', 
colPropAssoc[filter.iColumn]);
-
       if (property && filter.value.length > 0 && !filter.skipFilter) {
-        queryParams.push({
+        var result = {
           key: property.alias,
           value: filter.value,
           type: property.type
-        });
+        };
+        if (filter.type === 'number' || filter.type === 'ambari-bandwidth') {
+          result.type = this.getComparisonType(filter.value);
+          result.value = this.getProperValue(filter.value);
+        }
+        if (filter.type === 'ambari-bandwidth') {
+          result.value = this.convertMemory(filter.value);
+        }
+        if (result.value) {
+          queryParams.push(result);
+        }
       }
     }, this);
 
@@ -243,11 +252,72 @@ App.MainHostController = 
Em.ArrayController.extend(App.UserPref, {
   },
 
   /**
+   * Return value without predicate
+   * @param {String} value
+   * @return {String}
+   */
+  getProperValue: function (value) {
+    return (value.charAt(0) === '>' || value.charAt(0) === '<' || 
value.charAt(0) === '=') ? value.substr(1, value.length) : value;
+  },
+
+  /**
+   * Return value converted to kilobytes
+   * @param {String} value
+   * @return {*}
+   */
+  convertMemory: function (value) {
+    var scale = value.charAt(value.length - 1);
+    // first char may be predicate for comparison
+    value = this.getProperValue(value);
+    var parsedValue = parseFloat(value);
+
+    if (isNaN(parsedValue)) {
+      return value;
+    }
+
+    switch (scale) {
+      case 'g':
+        parsedValue *= 1048576;
+        break;
+      case 'm':
+        parsedValue *= 1024;
+        break;
+      case 'k':
+        break;
+      default:
+        //default value in GB
+        parsedValue *= 1048576;
+    }
+    return Math.round(parsedValue);
+  },
+
+  /**
+   * Return comparison type depending on populated predicate
+   * @param value
+   * @return {String}
+   */
+  getComparisonType: function (value) {
+    var comparisonChar = value.charAt(0);
+    var result = 'PLAIN';
+    if (isNaN(comparisonChar)) {
+      switch (comparisonChar) {
+        case '>':
+          result = 'MORE';
+          break;
+        case '<':
+          result = 'LESS';
+          break;
+      }
+    }
+    return result;
+  },
+
+  /**
    * Filter hosts by componentName of <code>component</code>
    * @param {App.HostComponent} component
    */
   filterByComponent: function (component) {
-    if(!component)
+    if (!component)
       return;
     var id = component.get('componentName');
     var column = 6;
@@ -301,9 +371,9 @@ App.MainHostController = 
Em.ArrayController.extend(App.UserPref, {
   /**
    * On click callback for delete button
    */
-  deleteButtonPopup:function () {
+  deleteButtonPopup: function () {
     var self = this;
-    App.showConfirmationPopup(function(){
+    App.showConfirmationPopup(function () {
       self.removeHosts();
     });
   },
@@ -325,7 +395,7 @@ App.MainHostController = 
Em.ArrayController.extend(App.UserPref, {
         }
       }),
       primary: Em.I18n.t('common.close'),
-      secondary : null,
+      secondary: null,
       didInsertElement: function () {
         this.$().find('.modal-footer').addClass('align-center');
         this.$().children('.modal').css({'margin-top': '-350px'});
@@ -337,7 +407,7 @@ App.MainHostController = 
Em.ArrayController.extend(App.UserPref, {
   /**
    * remove selected hosts
    */
-  removeHosts:function () {
+  removeHosts: function () {
     var hosts = this.get('content');
     var selectedHosts = hosts.filterProperty('isChecked', true);
     selectedHosts.forEach(function (_hostInfo) {
@@ -350,7 +420,7 @@ App.MainHostController = 
Em.ArrayController.extend(App.UserPref, {
    * remove hosts with id equal host_id
    * @param {String} host_id
    */
-  checkRemoved:function (host_id) {
+  checkRemoved: function (host_id) {
     var hosts = this.get('content');
     var selectedHosts = hosts.filterProperty('id', host_id);
     this.get('fullContent').removeObjects(selectedHosts);
@@ -361,7 +431,7 @@ App.MainHostController = 
Em.ArrayController.extend(App.UserPref, {
    * @param {Object} operationData - data about bulk operation (action, hosts 
or hostComponents etc)
    * @param {Array} hosts - list of affected hosts
    */
-  bulkOperation: function(operationData, hosts) {
+  bulkOperation: function (operationData, hosts) {
     if (operationData.componentNameFormatted) {
       if (operationData.action === 'RESTART') {
         this.bulkOperationForHostComponentsRestart(operationData, hosts);
@@ -419,7 +489,7 @@ App.MainHostController = 
Em.ArrayController.extend(App.UserPref, {
     var hostsMap = {};
 
     data.items.forEach(function (host) {
-      host.host_components.forEach(function(hostComponent){
+      host.host_components.forEach(function (hostComponent) {
         if 
(!App.components.get('clients').contains((hostComponent.HostRoles.component_name)))
 {
           if (hostsMap[host.Hosts.host_name]) {
             
hostsMap[host.Hosts.host_name].push(hostComponent.HostRoles.component_name);
@@ -468,7 +538,7 @@ App.MainHostController = 
Em.ArrayController.extend(App.UserPref, {
    * @param {Object} operationData - data about bulk operation (action, 
hostComponents etc)
    * @param {Ember.Enumerable} hosts - list of affected hosts
    */
-  bulkOperationForHostsRestart: function(operationData, hosts) {
+  bulkOperationForHostsRestart: function (operationData, hosts) {
     batchUtils.getComponentsFromServer({
       passiveState: 'OFF',
       hosts: hosts.mapProperty('hostName'),
@@ -526,8 +596,8 @@ App.MainHostController = 
Em.ArrayController.extend(App.UserPref, {
     });
   },
 
-  updateHostPassiveState: function(data, opt, params) {
-    App.router.get('clusterController').loadUpdatedStatus(function(){
+  updateHostPassiveState: function (data, opt, params) {
+    App.router.get('clusterController').loadUpdatedStatus(function () {
       batchUtils.infoPassiveState(params.passive_state);
     });
   },
@@ -536,7 +606,7 @@ App.MainHostController = 
Em.ArrayController.extend(App.UserPref, {
    * @param {Object} operationData - data about bulk operation (action, 
hostComponents etc)
    * @param {Array} hosts - list of affected hosts
    */
-  bulkOperationForHostComponents: function(operationData, hosts) {
+  bulkOperationForHostComponents: function (operationData, hosts) {
     var self = this;
 
     batchUtils.getComponentsFromServer({
@@ -592,7 +662,7 @@ App.MainHostController = 
Em.ArrayController.extend(App.UserPref, {
    * @param operationData
    * @param data
    */
-  bulkOperationForHostComponentsDecommissionCallBack: function(operationData, 
data){
+  bulkOperationForHostComponentsDecommissionCallBack: function (operationData, 
data) {
     var service = App.Service.find(operationData.serviceName);
     var components = [];
 
@@ -631,8 +701,8 @@ App.MainHostController = 
Em.ArrayController.extend(App.UserPref, {
           var parameters = {
             "slave_type": slaveName
           };
-          var contextString = turn_off? 'hosts.host.' + 
slaveName.toLowerCase() + '.recommission':
-            'hosts.host.' + slaveName.toLowerCase() + '.decommission';
+          var contextString = turn_off ? 'hosts.host.' + 
slaveName.toLowerCase() + '.recommission' :
+              'hosts.host.' + slaveName.toLowerCase() + '.decommission';
           if (turn_off) {
             parameters['included_hosts'] = 
hostsWithComponentInProperState.join(',')
           }
@@ -667,7 +737,7 @@ App.MainHostController = 
Em.ArrayController.extend(App.UserPref, {
    * @param {Object} operationData
    * @param {Array} hosts
    */
-  bulkOperationForHostComponentsRestart: function(operationData, hosts) {
+  bulkOperationForHostComponentsRestart: function (operationData, hosts) {
     var service = App.Service.find(operationData.serviceName);
 
     batchUtils.getComponentsFromServer({
@@ -702,15 +772,15 @@ App.MainHostController = 
Em.ArrayController.extend(App.UserPref, {
     });
   },
 
-  updateHostComponentsPassiveState: function(data, opt, params) {
-    App.router.get('clusterController').loadUpdatedStatus(function(){
+  updateHostComponentsPassiveState: function (data, opt, params) {
+    App.router.get('clusterController').loadUpdatedStatus(function () {
       batchUtils.infoPassiveState(params.passive_state);
     });
   },
   /**
    * Show BO popup after bulk request
    */
-  bulkOperationForHostComponentsSuccessCallback: function() {
+  bulkOperationForHostComponentsSuccessCallback: function () {
     App.router.get('applicationController').dataLoading().done(function 
(initValue) {
       if (initValue) {
         App.router.get('backgroundOperationsController').showPopup();
@@ -721,7 +791,7 @@ App.MainHostController = 
Em.ArrayController.extend(App.UserPref, {
    * associations between host property and column index
    * @type {Array}
    */
-  colPropAssoc: function(){
+  colPropAssoc: function () {
     var associations = [];
     associations[0] = 'healthClass';
     associations[1] = 'publicHostName';

Reply via email to