/**
* 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 validator = require('utils/validator');
App.MainAlertDefinitionActionsController = Em.ArrayController.extend({
name: 'mainAlertDefinitionActionsController',
/**
* List of available actions for alert definitions
* @type {{title: string, icon: string, action: string, showDivider: boolean}[]}
*/
content: [
/*{
title: Em.I18n.t('alerts.actions.create'),
icon: 'icon-plus',
action: 'createNewAlertDefinition',
showDivider: true
},*/
{
title: Em.I18n.t('alerts.actions.manageGroups'),
icon: 'icon-th-large',
action: 'manageAlertGroups',
showDivider: false
},
{
title: Em.I18n.t('alerts.actions.manageNotifications'),
icon: 'icon-envelope-alt',
action: 'manageNotifications',
showDivider: false
},
{
title: Em.I18n.t('alerts.actions.manageSettings'),
icon: 'icon-cogs',
action: 'manageSettings',
showDivider: false
}
],
/**
* Common handler for menu item click
* Call proper controller's method described in action
-field (see content
)
* @param {object} event
* @method actionHandler
*/
actionHandler: function(event) {
var menuElement = event.context,
action = menuElement.action;
if ('function' === Em.typeOf(Em.get(this, action))) {
this[action]();
}
else {
Em.assert('Invalid action provided - ' + action, false);
}
},
/**
* Start "Create Alert Definition" wizard
* @method createNewAlertDefinition
*/
createNewAlertDefinition: function() {
App.router.transitionTo('alertAdd');
},
/**
* Handler when clicking on "Manage Alert Groups", a popup will show up
* @method manageAlertGroups
* @return {App.ModalPopup}
*/
manageAlertGroups: function () {
return App.ModalPopup.show({
header: Em.I18n.t('alerts.actions.manage_alert_groups_popup.header'),
bodyClass: App.MainAlertsManageAlertGroupView.extend({
controllerBinding: 'App.router.manageAlertGroupsController'
}),
classNames: ['sixty-percent-width-modal', 'manage-alert-group-popup'],
primary: Em.I18n.t('common.save'),
onPrimary: function () {
var modifiedAlertGroups = this.get('subViewController.defsModifiedAlertGroups');
var dataForSuccessPopup = {
created: modifiedAlertGroups.toCreate.length,
deleted: modifiedAlertGroups.toDelete.length,
updated: modifiedAlertGroups.toSet.length
};
var showSuccessPopup = dataForSuccessPopup.created + dataForSuccessPopup.deleted + dataForSuccessPopup.updated > 0;
// Save modified Alert-groups
var self = this;
var errors = [];
var deleteQueriesCounter = modifiedAlertGroups.toDelete.length;
var createQueriesCounter = modifiedAlertGroups.toCreate.length;
var deleteQueriesRun = false;
var createQueriesRun = false;
var runNextQuery = function () {
if (!deleteQueriesRun && deleteQueriesCounter > 0) {
deleteQueriesRun = true;
modifiedAlertGroups.toDelete.forEach(function (group) {
self.get('subViewController').removeAlertGroup(group, finishFunction, finishFunction);
}, this);
} else if (!createQueriesRun && deleteQueriesCounter < 1) {
createQueriesRun = true;
modifiedAlertGroups.toSet.forEach(function (group) {
self.get('subViewController').updateAlertGroup(group, finishFunction, finishFunction);
}, this);
modifiedAlertGroups.toCreate.forEach(function (group) {
self.get('subViewController').postNewAlertGroup(group, finishFunction);
}, this);
}
};
var finishFunction = function (xhr, text, errorThrown) {
if (xhr && errorThrown) {
var error = xhr.status + "(" + errorThrown + ") ";
try {
var json = $.parseJSON(xhr.responseText);
error += json.message;
} catch (err) {
}
errors.push(error);
}
if (createQueriesRun) {
createQueriesCounter--;
} else {
deleteQueriesCounter--;
}
if (deleteQueriesCounter + createQueriesCounter < 1) {
if (errors.length > 0) {
self.get('subViewController').set('errorMessage', errors.join(". "));
}
else {
self.hide();
if (showSuccessPopup) {
App.ModalPopup.show({
secondary: null,
header: Em.I18n.t('alerts.groups.successPopup.header'),
bodyClass: Em.View.extend({
dataForSuccessPopup: dataForSuccessPopup,
templateName: require('templates/main/alerts/alert_groups/success_popup_body')
})
});
}
App.router.get('updateController').updateAlertGroups(function () {
App.router.get('manageAlertGroupsController').toggleProperty('changeTrigger');
App.router.get('updateController').updateAlertDefinitions(function() {
App.router.get('updateController').updateAlertNotifications(Em.K);
});
});
}
} else {
runNextQuery();
}
};
runNextQuery();
},
subViewController: function () {
return App.router.get('manageAlertGroupsController');
}.property('App.router.manageAlertGroupsController'),
disablePrimary: Em.computed.not('subViewController.isDefsModified'),
didInsertElement: function () {
this.fitZIndex();
}
});
},
/**
* "Manage Alert Notifications" handler
* @method manageNotifications
* @return {App.ModalPopup}
*/
manageNotifications: function () {
return App.ModalPopup.show({
header: Em.I18n.t('alerts.actions.manage_alert_notifications_popup.header'),
bodyClass: App.ManageAlertNotificationsView.extend({
controllerBinding: 'App.router.manageAlertNotificationsController'
}),
classNames: ['sixty-percent-width-modal', 'manage-configuration-group-popup'],
secondary: null,
primary: Em.I18n.t('common.close'),
autoHeight: false
});
},
/**
* "Manage Alert Settings" handler
* @method manageSettings
* @return {App.ModalPopup}
*/
manageSettings: function () {
var controller = this;
var configProperties = App.router.get('clusterController.clusterEnv.properties');
return App.ModalPopup.show({
classNames: ['fourty-percent-width-modal'],
header: Em.I18n.t('alerts.actions.manageSettings'),
primary: Em.I18n.t('common.save'),
secondary: Em.I18n.t('common.cancel'),
inputValue: configProperties.alerts_repeat_tolerance || '1',
errorMessage: Em.I18n.t('alerts.actions.editRepeatTolerance.error'),
isInvalid: function () {
var intValue = Number(this.get('inputValue'));
return this.get('inputValue') !== 'DEBUG' && (!validator.isValidInt(intValue) || intValue < 1 || intValue > 99);
}.property('inputValue'),
disablePrimary: Em.computed.alias('isInvalid'),
onPrimary: function () {
if (this.get('isInvalid')) {
return;
}
configProperties.alerts_repeat_tolerance = this.get('inputValue');
App.ajax.send({
name: 'admin.save_configs',
sender: controller,
data: {
siteName: 'cluster-env',
properties: configProperties
},
error: 'manageSettingsErrorCallback'
});
this.hide();
},
bodyClass: Ember.View.extend({
templateName: require('templates/common/modal_popups/prompt_popup'),
title: Em.I18n.t('alerts.actions.editRepeatTolerance.title'),
description: Em.I18n.t('alerts.actions.editRepeatTolerance.description'),
label: Em.I18n.t('alerts.actions.editRepeatTolerance.label')
})
});
},
manageSettingsErrorCallback: function(data) {
var error = Em.I18n.t('alerts.actions.manageSettings.error');
if(data && data.responseText){
try {
var json = $.parseJSON(data.responseText);
error += json.message;
} catch (err) {
}
}
App.showAlertPopup(Em.I18n.t('alerts.actions.manageSettings.error'), error);
}
});