/** * 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(data) { console.time('App.alertDefinitionSummaryMapper execution time'); if (!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]; if (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]; if (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 }); }); } }); if (!$.mocho) { //for some reasons this causing error in unit test App.store.commit(); } console.timeEnd('App.alertDefinitionSummaryMapper execution time'); } });