Code coverage report for app/mappers/service_mapper.js

Statements: 10.81% (4 / 37)      Branches: 0% (0 / 10)      Functions: 14.29% (1 / 7)      Lines: 10.81% (4 / 37)      Ignored: none     

All files » app/mappers/ » service_mapper.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96    1                                   1 1   1                                                                                                                                                
'use strict';
 
;require.register("mappers/service_mapper", function (exports, require, module) {
  /**
   * Licensed to the Apache Software Foundation (ASF) under one or more
   * contributor license agreements. See the NOTICE file distributed with this
   * work for additional information regarding copyright ownership. The ASF
   * licenses this file to you under the Apache License, Version 2.0 (the
   * "License"); you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   * http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
   * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
   * License for the specific language governing permissions and limitations under
   * the License.
   */
 
  var App = require('app');
  var misc = require('utils/misc');
 
  App.serviceMapper = App.QuickDataMapper.create({
    model: App.Service,
    config: {
      id: 'ServiceInfo.service_name',
      service_name: 'ServiceInfo.service_name',
      work_status: 'ServiceInfo.state',
      desired_repository_version_id: 'ServiceInfo.desired_repository_version_id'
    },
    initialAppLoad: false,
    passiveStateMap: {},
    map: function map(json) {
      console.time("App.serviceMapper execution time");
      var self = this;
      var passiveStateMap = this.get('passiveStateMap');
      json.items.forEach(function (service) {
        var cachedService = App.cache['services'].findProperty('ServiceInfo.service_name', service.ServiceInfo.service_name);
        if (cachedService) {
          // restore service workStatus
          App.Service.find(cachedService.ServiceInfo.service_name).set('workStatus', service.ServiceInfo.state);
          cachedService.ServiceInfo.state = service.ServiceInfo.state;
        } else {
          var serviceData = {
            ServiceInfo: {
              service_name: service.ServiceInfo.service_name,
              state: service.ServiceInfo.state,
              desired_repository_version_id: service.ServiceInfo.desired_repository_version_id
            },
            host_components: [],
            components: []
          };
          App.cache['services'].push(serviceData);
        }
        passiveStateMap[service.ServiceInfo.service_name] = service.ServiceInfo.maintenance_state;
      });
 
      if (!this.get('initialAppLoad')) {
        var parsedCacheServices = App.cache['services'].map(function (item) {
          App.serviceMetricsMapper.mapExtendedModel(item);
          return self.parseIt(item, self.get('config'));
        });
        parsedCacheServices = misc.sortByOrder(App.StackService.find().mapProperty('serviceName'), parsedCacheServices);
        App.store.safeLoadMany(this.get('model'), parsedCacheServices);
        this.set('initialAppLoad', true);
      }
      this.servicesLoading().done(function setMaintenanceState() {
        for (var service in passiveStateMap) {
          if (passiveStateMap.hasOwnProperty(service)) {
            App.Service.find(service).set('passiveState', passiveStateMap[service]);
          }
        }
      });
 
      console.timeEnd("App.serviceMapper execution time");
    },
 
    servicesLoading: function servicesLoading() {
      var dfd = $.Deferred();
      var isAllServicesLoaded = App.store.findAll(App.Service).everyProperty('isLoaded', true);
      if (isAllServicesLoaded) {
        dfd.resolve();
      } else {
        var interval = setInterval(function checkIfServicesLoaded() {
          var isAllServicesLoaded = App.store.findAll(App.Service).everyProperty('isLoaded', true);
          if (isAllServicesLoaded) {
            dfd.resolve();
            clearInterval(interval);
          }
        }, 5);
      }
      return dfd.promise();
    }
  });
});