Code coverage report for app/mappers/alert_definition_summary_mapper.js

Statements: 66.04% (35 / 53)      Branches: 55% (11 / 20)      Functions: 66.67% (6 / 9)      Lines: 67.31% (35 / 52)      Ignored: none     

All files » app/mappers/ » alert_definition_summary_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 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121    1                                   1 1   1         6   6 6 6 6 6 30 30 30   30 120       120 54   120 84     30               6 36 36 6   36 36   6       6 6 6 6 6 6 6                                                                               6      
'use strict';
 
;require.register("mappers/alert_definition_summary_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 dataManipulation = require('utils/data_manipulation');
 
  App.alertDefinitionSummaryMapper = App.QuickDataMapper.create({
 
    config: {},
 
    map: function map(data) {
      console.time('App.alertDefinitionSummaryMapper execution time');
 
      Iif (!data.alerts_summary_grouped) return;
      var alertDefinitions = App.AlertDefinition.find();
      var alertDefinitionsMap = alertDefinitions.toArray().toMapByProperty('id');
      var summaryMap = {};
      data.alerts_summary_grouped.forEach(function (alertDefinitionSummary) {
        var alertDefinition = alertDefinitionsMap[alertDefinitionSummary.definition_id];
        Eif (alertDefinition) {
          var summary = {},
              timestamp = 0;
          Em.keys(alertDefinitionSummary.summary).forEach(function (status) {
            summary[status] = {
              count: alertDefinitionSummary.summary[status].count,
              maintenanceCount: alertDefinitionSummary.summary[status].maintenance_count
            };
            if (alertDefinitionSummary.summary[status].latest_text) {
              summary[status].latestText = alertDefinitionSummary.summary[status].latest_text;
            }
            if (alertDefinitionSummary.summary[status].original_timestamp > timestamp) {
              timestamp = alertDefinitionSummary.summary[status].original_timestamp;
            }
          });
          summaryMap[alertDefinitionSummary.definition_id] = {
            summary: summary,
            lastTriggered: App.dateTimeWithTimeZone(parseInt(timestamp, 10)),
            lastTriggeredRaw: timestamp
          };
        }
      });
 
      alertDefinitions.forEach(function (d) {
        var id = d.get('id');
        if (alertDefinitionsMap[id].get('stateManager.currentState.name') !== 'saved') {
          alertDefinitionsMap[id].get('stateManager').transitionTo('saved');
        }
        alertDefinitionsMap[id].setProperties(summaryMap[id]);
        if (!alertDefinitionsMap[id].get('enabled')) {
          // clear summary for disabled alert definitions
          alertDefinitionsMap[id].set('summary', {});
        }
      });
      // set alertsCount and hasCriticalAlerts for each service
      var groupedByServiceName = dataManipulation.groupPropertyValues(alertDefinitions, 'service.serviceName');
      var groupedByComponentName = dataManipulation.groupPropertyValues(alertDefinitions, 'componentName');
      var services = App.Service.find();
      var servicesMap = services.toArray().toMapByProperty('id');
      Object.keys(groupedByServiceName).forEach(function (serviceName) {
        var service = servicesMap[serviceName];
        Iif (service) {
          var hasCriticalAlerts = false;
 
          var alertsCount = groupedByServiceName[serviceName].map(function (alertDefinition) {
 
            var criticalCount = alertDefinition.getWithDefault('summary.CRITICAL.count', 0);
            var warningCount = alertDefinition.getWithDefault('summary.WARNING.count', 0);
 
            if (criticalCount) {
              hasCriticalAlerts = true;
            }
            return criticalCount + warningCount;
          }).reduce(Em.sum, 0);
 
          service.setProperties({
            alertsCount: alertsCount,
            hasCriticalAlerts: hasCriticalAlerts
          });
 
          service.get('hostComponents').filterProperty('isMaster').forEach(function (master) {
 
            hasCriticalAlerts = false;
            alertsCount = (groupedByComponentName[master.get('componentName')] || []).map(function (alertDefinition) {
 
              var criticalCount = alertDefinition.getWithDefault('summary.CRITICAL.count', 0);
              var warningCount = alertDefinition.getWithDefault('summary.WARNING.count', 0);
 
              if (criticalCount) {
                hasCriticalAlerts = true;
              }
              return criticalCount + warningCount;
            }).reduce(Em.sum, 0);
 
            master.setProperties({
              alertsCount: alertsCount,
              hasCriticalAlerts: hasCriticalAlerts
            });
          });
        }
      });
      console.timeEnd('App.alertDefinitionSummaryMapper execution time');
    }
  });
});