map: function()

in ambari-web/app/mappers/service_mapper.js [140:252]


  map: function (json) {
    if (!this.get('model')) {
      return;
    }
    console.time('App.servicesMapper execution time');
    if (json.items) {

      // Host components
      var hostComponents = [];
      var services = [];
      var previousComponentStatuses = App.cache['previousComponentStatuses'];
      /**
       * services contains constructed service-components structure from components array
       */
      json.items.forEach(function (component) {
        var service = services.findProperty('ServiceInfo.service_name', component.ServiceComponentInfo.service_name);
        var serviceName = component.ServiceComponentInfo.service_name;
        if (!service) {
          service = {
            ServiceInfo: {
              service_name: component.ServiceComponentInfo.service_name
            },
            host_components: [],
            components: []
          };
          services.push(service);
        }
        service.components.push(component);
        component.host_components.forEach(function (host_component) {
          host_component.id = host_component.HostRoles.component_name + "_" + host_component.HostRoles.host_name;
          previousComponentStatuses[host_component.id] = host_component.HostRoles.state;
          if (host_component.HostRoles.component_name == "HBASE_MASTER") {
            this.config3.ha_status = 'metrics.hbase.master.IsActiveMaster';
          }
          var comp = this.parseIt(host_component, this.config3);
          comp.service_id = serviceName;
          hostComponents.push(comp);
        }, this);
      }, this);

      //load master components to model
      App.store.loadMany(this.get('model3'), hostComponents);

      var result = [];

      //parse service metrics from components
      services.forEach(function (item) {
        var finalJson = [];
        var serviceData = App.cache['hostComponentsOnService'][item.ServiceInfo.service_name];
        item.host_components = serviceData.host_components;
        item.running_host_components = serviceData.running_host_components;
        item.unknown_host_components = serviceData.unknown_host_components;
        item.host_components.sort();

        if (item && item.ServiceInfo && item.ServiceInfo.service_name == "HDFS") {
          finalJson = this.hdfsMapper(item);
          finalJson.rand = Math.random();
          result.push(finalJson);
          App.store.load(App.HDFSService, finalJson);
        } else if (item && item.ServiceInfo && item.ServiceInfo.service_name == "MAPREDUCE") {
          finalJson = this.mapreduceMapper(item);
          finalJson.rand = Math.random();
          result.push(finalJson);
          App.store.load(App.MapReduceService, finalJson);
        } else if (item && item.ServiceInfo && item.ServiceInfo.service_name == "HBASE") {
          finalJson = this.hbaseMapper(item);
          finalJson.rand = Math.random();
          result.push(finalJson);
          App.store.load(App.HBaseService, finalJson);
        } else if (item && item.ServiceInfo && item.ServiceInfo.service_name == "FLUME") {
          finalJson = this.flumeMapper(item);
          finalJson.rand = Math.random();
          result.push(finalJson);
          if (finalJson.nodeObjs) {
            finalJson.nodeObjs.forEach(function (no) {
              App.store.load(App.FlumeNode, no);
            });
          }
          App.store.load(App.FlumeService, finalJson);
        } else if (item && item.ServiceInfo && item.ServiceInfo.service_name == "YARN") {
          finalJson = this.yarnMapper(item);
          finalJson.rand = Math.random();
          result.push(finalJson);
          App.store.load(App.YARNService, finalJson);
        } else if (item && item.ServiceInfo && item.ServiceInfo.service_name == "MAPREDUCE2") {
          finalJson = this.mapreduce2Mapper(item);
          finalJson.rand = Math.random();
          result.push(finalJson);
          App.store.load(App.MapReduce2Service, finalJson);
        } else {
          finalJson = this.parseIt(item, this.config);
          finalJson.rand = Math.random();
          this.mapQuickLinks(finalJson, item);
          result.push(finalJson);
        }
      }, this);

      result = misc.sortByOrder(App.Service.servicesSortOrder, result);

      //load services to model
      App.store.loadMany(this.get('model'), result);

      var servicesMap = {};
      //calculate service statuses according to their host-components
      App.HostComponent.find().filterProperty('isMaster').forEach(function (item) {
        if (item) {
          this.countServiceComponents(item, servicesMap, servicesMap[item.get('service.id')]);
        }
      }, this);
      this.updateServicesStatus(App.Service.find(), servicesMap);
    }
    console.timeEnd('App.servicesMapper execution time');
  },