Procházet zdrojové kódy

AMBARI-1248. Refactoring of update, services and hosts mapper. (yusaku)

git-svn-id: https://svn.apache.org/repos/asf/incubator/ambari/trunk@1437204 13f79535-47bb-0310-9956-ffa450edef68
Yusaku Sako před 12 roky
rodič
revize
0aaa57126a

+ 2 - 0
CHANGES.txt

@@ -17,6 +17,8 @@ Trunk (unreleased changes):
 
  IMPROVEMENTS
 
+ AMBARI-1248. Refactoring of update, services and hosts mapper. (yusaku)
+
  AMBARI-1247. Disable links for previous steps in left nav on Summary step.
  (yusaku)
 

+ 8 - 47
ambari-web/app/mappers/hosts_mapper.js

@@ -18,8 +18,8 @@
 var App = require('app');
 
 App.hostsMapper = App.QuickDataMapper.create({
+
   model: App.Host,
-  tmp_result:[],
   config: {
     id: 'Hosts.host_name',
     host_name: 'Hosts.host_name',
@@ -42,23 +42,17 @@ App.hostsMapper = App.QuickDataMapper.create({
     load_fifteen: 'metrics.load.load_fifteen',
     cpu_usage: 'cpu_usage',
     memory_usage: 'memory_usage',
-    $network_usage: 36,
-    $io_usage: 39,
     last_heart_beat_time: "Hosts.last_heartbeat_time",
     os_arch: 'Hosts.os_arch',
     os_type: 'Hosts.os_type',
     ip: 'Hosts.ip'
   },
   map: function (json) {
-    var self = this;
-    if (!this.get('model')) {
-      return;
-    }
+
     if (json.items) {
 
+      var result = [];
       json.items.forEach(function (item) {
-        var result = [];
-        self.tmp_result=[];
 
         // Disk Usage
         if (item.metrics && item.metrics.disk && item.metrics.disk.disk_total && item.metrics.disk.disk_free) {
@@ -78,48 +72,15 @@ App.hostsMapper = App.QuickDataMapper.create({
           item.memory_usage = memUsedPercent.toFixed(1);
         }
 
-        if(App.Host.find(item.Hosts.host_name).get("hostName") == item.Hosts.host_name){ // UPDATE
-
-          App.Host.find(item.Hosts.host_name).set("cpuUsage", item.cpu_usage);
-          App.Host.find(item.Hosts.host_name).set("diskUsage", item.disk_usage);
-          App.Host.find(item.Hosts.host_name).set("memoryUsage", item.memory_usage);
-
-          self.tmp_result.push(this.parseIt(item, this.config));
-
-          $.map(self.tmp_result[0], function (e,a){
-            //console.log(a, "------------------", self.tmp_result[0][a])
-            if(typeof(e) === "string" || typeof(e) === "number")
-            {
-              var modelName=self.parseName(a);
-              if(typeof(App.Host.find(self.tmp_result[0].host_name).get(modelName)) !== "undefined"){
-                App.Host.find(self.tmp_result[0].host_name).set(modelName, self.tmp_result[0][a]);
-               // console.log(modelName, "------------------", self.tmp_result[0][a])
-              }
-            }
-          })
+        item.host_components.forEach(function (host_component) {
+          host_component.id = host_component.HostRoles.component_name + "_" + host_component.HostRoles.host_name;
+        }, this);
+        result.push(this.parseIt(item, this.config));
 
-        }else{ // ADD
-
-          item.host_components.forEach(function (host_component) {
-            host_component.id = host_component.HostRoles.component_name + "_" + host_component.HostRoles.host_name;
-          }, this);
-          result.push(this.parseIt(item, this.config));
-          App.store.loadMany(this.get('model'), result);
-
-        }
       }, this);
-       //console.log(this.get('model'), result);
-
-    }
-  },
 
-  parseName:function(name){
-    var new_name = name.replace(/_\w/g,replacer);
-    function replacer(str, p1, p2, offset, s)
-    {
-     return str[1].toUpperCase();
+      App.store.loadMany(this.get('model'), result);
     }
-    return new_name;
   }
 
 });

+ 3 - 31
ambari-web/app/mappers/server_data_mapper.js

@@ -17,7 +17,6 @@
  */
 
 var App = require('app');
-var stringUtils = require('utils/string_utils');
 
 App.ServerDataMapper = Em.Object.extend({
   jsonKey: false,
@@ -87,6 +86,9 @@ App.QuickDataMapper = App.ServerDataMapper.extend({
               result[i].push(this.parseIt(_data[index], config[i]));
             }
           }
+          if(_type == 'array'){
+            result[i] = result[i].sort();
+          }
         }
       }
     }
@@ -122,35 +124,5 @@ App.QuickDataMapper = App.ServerDataMapper.extend({
     }
 
     return json;
-  },
-  /**
-   * update fields in record
-   * @param record
-   * @param json
-   * @param fieldsNotUpdate
-   */
-  updateRecord: function (record, json, fieldsNotUpdate) {
-    for (var field in json) {
-      if (json[field] !== undefined && !fieldsNotUpdate.contains(field)) {
-        if(json[field] instanceof Array){
-          this.updateHasMany(record, stringUtils.underScoreToCamelCase(field), json[field]);
-        } else {
-          record.set(stringUtils.underScoreToCamelCase(field), json[field]);
-        }
-      }
-    }
-  },
-  /**
-   * update fields with hasMany type
-   * @param record
-   * @param field
-   * @param items
-   */
-  updateHasMany: function(record, field, items ){
-    var hasMany = record.get(field);
-    hasMany.clear();
-    items.forEach(function (item) {
-      hasMany.pushObject(hasMany.type.find(item));
-    });
   }
 });

+ 6 - 181
ambari-web/app/mappers/service_mapper.js

@@ -16,7 +16,6 @@
  */
 
 var App = require('app');
-var stringUtils = require('utils/string_utils');
 
 App.servicesMapper = App.QuickDataMapper.create({
   servicesSortOrder: [
@@ -49,7 +48,6 @@ App.servicesMapper = App.QuickDataMapper.create({
     id: 'ServiceInfo.service_name',
     service_name: 'ServiceInfo.service_name',
     work_status: 'ServiceInfo.state',
-    $service_audit: [ 1, 2, 3 ],
     $alerts: [ 1, 2, 3 ],
     host_components: 'host_components'
   },
@@ -133,27 +131,13 @@ App.servicesMapper = App.QuickDataMapper.create({
         var finalConfig = jQuery.extend({}, this.config);
         var finalJson = [];
         item.host_components = [];
-//        var json = this.parseIt(item, this.config);
-//        if(App.Service.find().someProperty('id', json.id)){
-//          var fieldsToUpdate = [
-//            'work_status',
-//            'components',
-//            'host_components'
-//          ]
-//          this.updateRecord(App.Service.find().findProperty('id', json.id), json, fieldsToUpdate);
-//          return;
-//        }
-
-        if (this.get('model').find(item.ServiceInfo.service_name).get('isLoaded')) {
-          this.update(item);
-          return;
-        }
         item.components.forEach(function (component) {
           component.host_components.forEach(function (host_component) {
             host_component.id = host_component.HostRoles.component_name + "_" + host_component.HostRoles.host_name;
             item.host_components.push(host_component.id);
-          }, this)
+          }, this);
         }, this);
+        item.host_components.sort();
 
         if (item && item.ServiceInfo && item.ServiceInfo.service_name == "HDFS") {
           // Change the JSON so that it is easy to map
@@ -189,157 +173,15 @@ App.servicesMapper = App.QuickDataMapper.create({
           }, this)
         }, this)
       }, this);
-      var newHostComponents = [];
+
       result.forEach(function(hcJson){
-        hcJson = this.calculateState(hcJson);
-        hcJson.id = hcJson.component_name + '_' + hcJson.host_id;
-        var component = App.HostComponent.find(hcJson.id);
-        if (component && component.get('isLoaded')) { // UPDATE
-          if (hcJson.work_status) {
-            component.set('workStatus', hcJson.work_status);
-          }
-          if (hcJson.component_name) {
-            component.set('componentName', hcJson.component_name);
-          }
-          if (hcJson.host_id) {
-            component.set('host', App.Host.find(hcJson.host_id));
-          }
-          if (hcJson.service_id) {
-            component.set('service', App.Service.find(hcJson.service_id));
-          }
-        } else {
-          newHostComponents.push(hcJson);
-        }
+        this.calculateState(hcJson);
       }, this);
-      if (newHostComponents.length > 0) {
-        App.store.loadMany(this.get('model3'), newHostComponents);
-      }
-    }
-  },
-  update: function (service) {
-    var finalJson;
-    switch (service.ServiceInfo.service_name) {
-      case 'HDFS':
-        finalJson = this.hdfsMapper(service);
-        App.HDFSService.find().map(function (e) {
-          e.set("version", finalJson.version);
-          e.set("nameNodeStartTime", finalJson.name_node_start_time);
-          e.set("jvmMemoryHeapCommitted", finalJson.jvm_memory_heap_committed);
-          e.set("jvmMemoryHeapUsed", finalJson.jvm_memory_heap_used);
-          e.set("capacityUsed", finalJson.capacity_used);
-          e.set("capacityTotal", finalJson.capacity_total);
-          e.set("dfsTotalBlocks", finalJson.dfs_total_blocks);
-          e.set("dfsCorruptBlocks", finalJson.dfs_corrupt_blocks);
-          e.set("dfsMissingBlocks", finalJson.dfs_missing_blocks);
-          e.set("dfsUnderReplicatedBlocks", finalJson.dfs_under_replicated_blocks);
-          e.set("dfsTotalFiles", finalJson.dfs_total_files);
-          e.set("upgradeStatus", finalJson.upgrade_status);
-          e.set("safeModeStatus", finalJson.safe_mode_status);
-          // Live data nodes
-          var dataNodes = e.get('liveDataNodes');
-          if (dataNodes) {
-            dataNodes.clear();
-            finalJson.live_data_nodes.forEach(function (ldn) {
-              dataNodes.pushObject(App.Host.find(ldn));
-            });
-          }
-          // Decommission data nodes
-          dataNodes = e.get('decommissionDataNodes');
-          if (dataNodes) {
-            dataNodes.clear();
-            finalJson.decommission_data_nodes.forEach(function (ldn) {
-              dataNodes.pushObject(App.Host.find(ldn));
-            });
-          }
-          // Dead data nodes
-          dataNodes = e.get('deadDataNodes');
-          if (dataNodes) {
-            dataNodes.clear();
-            finalJson.dead_data_nodes.forEach(function (ldn) {
-              dataNodes.pushObject(App.Host.find(ldn));
-            });
-          }
-          // Data nodes
-          dataNodes = e.get('dataNodes');
-          if (dataNodes) {
-            dataNodes.clear();
-            finalJson.data_nodes.forEach(function (ldn) {
-              dataNodes.pushObject(App.Host.find(ldn));
-            });
-          }
-        });
-        break;
-      case 'MAPREDUCE':
-        finalJson = this.mapreduceMapper(service);
-        App.MapReduceService.find().map(function (e) {
-          e.set("version", finalJson.version);
-          e.set("jobTrackerStartTime", finalJson.job_tracker_start_time);
-          e.set("jobTrackerHeapUsed", finalJson.job_tracker_heap_used);
-          e.set("jobTrackerHeapMax", finalJson.job_tracker_heap_max);
-          e.set("mapSlots", finalJson.map_slots);
-          e.set("reduceSlots", finalJson.reduce_slots);
-          e.set("jobsSubmitted", finalJson.jobs_submitted);
-          e.set("jobsCompleted", finalJson.jobs_completed);
-          e.set("mapSlotsOccupied", finalJson.map_slots_occupied);
-          e.set("mapSlotsReserved", finalJson.map_slots_reserved);
-          e.set("reduceSlotsOccupied", finalJson.reduce_slots_occupied);
-          e.set("reduceSlotsReserved", finalJson.reduce_slots_reserved);
-          e.set("mapsRunning", finalJson.maps_running);
-          e.set("mapsWaiting", finalJson.maps_waiting);
-          e.set("reducesRunning", finalJson.reduces_running);
-          e.set("reducesWaiting", finalJson.reduces_waiting);
-          e.set("trackersDecommissioned", finalJson.trackers_decommissioned);
-
-          var taskTrackers = e.get('taskTrackers');
-          if (taskTrackers) {
-            taskTrackers.clear();
-            finalJson.task_trackers.forEach(function (ldn) {
-              taskTrackers.pushObject(App.Host.find(ldn));
-            });
-          }
-
-          taskTrackers = e.get('aliveTrackers');
-          if (taskTrackers) {
-            taskTrackers.clear();
-            finalJson.alive_trackers.forEach(function (ldn) {
-              taskTrackers.pushObject(App.Host.find(ldn));
-            });
-          }
-
-        })
-        break;
-      case 'HBASE':
-        finalJson = this.hbaseMapper(service);
-        App.HBaseService.find().map(function (e) {
-          e.set("version", finalJson.version);
-          e.set("masterStartTime", finalJson.master_start_time);
-          e.set("masterActiveTime", finalJson.master_active_time);
-          e.set("averageLoad", finalJson.average_load);
-          e.set("regionsInTransition", finalJson.regions_in_transition);
-          e.set("revision", finalJson.revision);
-          e.set("heapMemoryUsed", finalJson.heap_memory_used);
-          e.set("heapMemoryMax", finalJson.heap_memory_max);
 
-          var regionServers = e.get('regionServers');
-          if (regionServers) {
-            regionServers.clear();
-            finalJson.region_servers.forEach(function (ldn) {
-              regionServers.pushObject(App.Host.find(ldn));
-            });
-          }
-
-        })
-        break;
-      default:
-        this.otherMapper(service);
-    }
-  },
-  otherMapper: function (item) {
-    var result = [];
-    if (App.Service.find(item.ServiceInfo.service_name).get("serviceName") == item.ServiceInfo.service_name) {
-      //update other service
+      App.store.loadMany(this.get('model3'), result);
     }
   },
+
   hdfsMapper: function (item) {
     var result = [];
     var finalConfig = jQuery.extend({}, this.config);
@@ -471,22 +313,5 @@ App.servicesMapper = App.QuickDataMapper.create({
     finalJson = this.parseIt(item, finalConfig);
     finalJson.quick_links = [13, 14, 15, 16, 17, 18];
     return finalJson;
-  },
-  updateRecord: function (record, json, fieldsToUpdate) {
-    for (var field in fieldsToUpdate) {
-      if (json[field] !== undefined) {
-        if(json[field] instanceof Array){
-          this.updateHasMany(record, stringUtils.underScoreToCamelCase(field), json[field]);
-        } else {
-          record.set(stringUtils.underScoreToCamelCase(field), json[field]);
-        }
-      }
-    }
-  },
-  updateHasMany: function(record, field, items ){
-    record.get(field).clear();
-    items.forEach(function (item) {
-      record.get(field).pushObject(record.get(field).type.find().findProperty('id', item));
-    });
   }
 });

+ 3 - 16
ambari-web/app/mappers/status_mapper.js

@@ -22,11 +22,6 @@ App.statusMapper = App.QuickDataMapper.create({
     work_status:'ServiceInfo.state'
   },
 
-  config2:{
-    id:'ServiceComponentInfo.component_name',
-    work_status:'host_components[0].HostRoles.state'
-  },
-
   config3:{
     id:'id',
     work_status:'HostRoles.state',
@@ -38,19 +33,9 @@ App.statusMapper = App.QuickDataMapper.create({
     if (json.items) {
       var result = [];
       json.items.forEach(function (item) {
-
-        item.host_components = [];
-        item.components.forEach(function (component) {
-          component.host_components.forEach(function (host_component) {
-            host_component.id = host_component.HostRoles.component_name + "_" + host_component.HostRoles.host_name;
-            item.host_components.push(host_component.id);
-          }, this)
-        }, this);
-
         result.push(this.parseIt(item, this.config));
       }, this);
 
-      //console.log(result)
       var services = App.Service.find();
       result.forEach(function(item){
         var service = services.findProperty('id', item.id);
@@ -59,16 +44,18 @@ App.statusMapper = App.QuickDataMapper.create({
         }
       })
 
+
+      //host_components
       result = [];
       json.items.forEach(function (item) {
         item.components.forEach(function (component) {
           component.host_components.forEach(function (host_component) {
+            host_component.id = host_component.HostRoles.component_name + "_" + host_component.HostRoles.host_name;
             result.push(this.parseIt(host_component, this.config3));
           }, this)
         }, this)
       }, this);
 
-      //console.log(result)
       var hostComponents = App.HostComponent.find();
       result.forEach(function(item){
         var hostComponent = hostComponents.findProperty('id', item.id);

+ 0 - 2
ambari-web/app/models/host.js

@@ -45,8 +45,6 @@ App.Host = DS.Model.extend({
   healthStatus: DS.attr('string'),
   cpuUsage: DS.attr('number'),
   memoryUsage: DS.attr('number'),
-  networkUsage: DS.attr('number'),
-  ioUsage: DS.attr('number'),
   lastHeartBeatTime: DS.attr('number'),
   osType: DS.attr("string"),
   diskInfo: DS.attr('object'),

+ 0 - 1
ambari-web/app/models/service.js

@@ -22,7 +22,6 @@ var App = require('app');
 App.Service = DS.Model.extend({
 
   serviceName: DS.attr('string'),
-  serviceAudit: DS.hasMany('App.ServiceAudit'),
 
   workStatus: DS.attr('string'),
   alerts: DS.hasMany('App.Alert'),

+ 3 - 0
ambari-web/app/utils/http_client.js

@@ -56,6 +56,9 @@ App.HttpClient = Em.Object.create({
     $.extend(options, {
       url: url,
       success: function (data) {
+        try {
+          App.store.commit();
+        } catch (err) {}
         mapper.map(data);
       },
       error: errorHandler