blob: 0469a34a2199c8eb72266c9ebb605c1a80db01fd [file] [log] [blame]
/**
* 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 validator = require('utils/validator');
var filters = require('views/common/filter_view');
var sort = require('views/common/sort_view');
App.MainAlertDefinitionDetailsView = App.TableView.extend({
templateName: require('templates/main/alerts/definition_details'),
/**
* Determines if <code>controller.content</code> is loaded
* @type {bool}
*/
isLoaded: false,
/**
* @type {string}
*/
enabledDisplay: Em.I18n.t('alerts.table.state.enabled'),
/**
* @type {string}
*/
disabledDisplay: Em.I18n.t('alerts.table.state.disabled'),
colPropAssoc: ['serviceName', 'hostName', 'state'],
/**
* @type {string}
*/
errorMessage: '',
/**
* return filtered number of all content number information displayed on the page footer bar
* @returns {String}
*/
filteredContentInfo: Em.computed.i18nFormat('tableView.filters.filteredAlertInstancesInfo', 'filteredCount', 'totalCount'),
content: function () {
return this.get('controller.alerts');
}.property('controller.alerts.@each'),
willInsertElement: function () {
this._super();
this.get('controller').clearStep();
if (this.get('controller.content.isLoaded')) {
this.set('isLoaded', true);
this.get('controller').loadAlertInstances();
} else {
App.router.get('clusterController').addObserver('isAlertsLoaded', this, 'loadAfterModelLoaded');
}
},
loadAfterModelLoaded: function() {
var clusterController = App.router.get('clusterController');
if (clusterController.get('isAlertsLoaded')) {
this.set('isLoaded', true);
this.set('controller.content', App.AlertDefinition.find(parseInt(this.get('controller.content.id'))));
this.get('controller').loadAlertInstances();
clusterController.removeObserver('isAlertsLoaded', this, 'loadAfterModelLoaded');
}
},
nameValidation: function () {
var alertName = this.get('controller.editing.label.value').trim();
var errorMessage = '';
this.set('controller.editing.label.isError',false);
if(alertName && !validator.isValidAlertName(alertName)){
errorMessage = Em.I18n.t("alert.definition.name.invalid");
this.set('controller.editing.label.isError',true);
}
this.set('controller.errorMessage',errorMessage);
}.observes('controller.editing.label.value'),
didInsertElement: function () {
this.filter();
this.tooltipsUpdater();
},
/**
* Update tooltips when <code>pageContent</code> is changed
* @method tooltipsUpdater
*/
tooltipsUpdater: function () {
Em.run.next(function () {
App.tooltip($(".enable-disable-button"));
});
}.observes('controller.content.enabled'),
sortView: sort.wrapperView.extend({}),
/**
* Sorting header for <label>alertDefinition.label</label>
* @type {Em.View}
*/
serviceSort: sort.fieldView.extend({
column: 0,
name: 'serviceName',
displayName: Em.I18n.t('common.service')
}),
/**
* Sorting header for <label>alertDefinition.status</label>
* @type {Em.View}
*/
hostNameSort: sort.fieldView.extend({
column: 1,
name: 'hostName',
displayName: Em.I18n.t('common.host')
}),
/**
* Sorting header for <label>alertDefinition.service.serviceName</label>
* @type {Em.View}
*/
stateSort: sort.fieldView.extend({
column: 2,
name: 'state',
displayName: Em.I18n.t('common.status')
}),
/**
* Filtering header for <label>alertInstance.hostName</label>
* @type {Em.View}
*/
hostNameFilterView: filters.createTextView({
column: 1,
fieldType: 'input-medium',
onChangeValue: function(){
this.get('parentView').updateFilter(this.get('column'), this.get('value'), 'string');
}
}),
/**
* Filtering header for <label>alertInstance.serviceName</label>
* @type {Em.View}
*/
serviceFilterView: filters.createSelectView({
column: 0,
fieldType: 'filter-input-width',
content: filters.getComputedServicesList(),
onChangeValue: function () {
this.get('parentView').updateFilter(this.get('column'), this.get('value'), 'select');
}
}),
/**
* Filtering header for <label>alertInstance.state</label>
* @type {Em.View}
*/
stateFilterView: filters.createSelectView({
column: 2,
fieldType: 'filter-input-width',
content: [
{
value: '',
label: Em.I18n.t('common.all')
},
{
value: 'OK',
label: 'OK'
},
{
value: 'WARNING',
label: 'WARNING'
},
{
value: 'CRITICAL',
label: 'CRITICAL'
},
{
value: 'UNKNOWN',
label: 'UNKNOWN'
},
{
value: 'PENDING',
label: 'NONE'
}
],
onChangeValue: function () {
this.get('parentView').updateFilter(this.get('column'), this.get('value'), 'select');
}
}),
/**
* View calculates and represents count of alerts on appropriate host during last day
*/
lastDayCount: Em.View.extend({
hostName: '', // binding from template
template: Ember.Handlebars.compile('<span>{{view.count}}</span>'),
count: function () {
var lastDayAlertsCount = this.get('parentView.controller.lastDayAlertsCount');
return lastDayAlertsCount ? lastDayAlertsCount[this.get('hostName')] || 0 : Em.I18n.t('common.loading.eclipses');
}.property('parentView.controller.lastDayAlertsCount', 'hostName')
}),
/**
* View represents each row of instances table
*/
instanceTableRow: Em.View.extend({
tagName: 'tr',
didInsertElement: function () {
App.tooltip(this.$("[rel=tooltip]"));
App.tooltip(this.$(".alert-text"), {
placement: 'left',
template: '<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner alert-def-detail-tooltip"></div></div>'
});
},
willDestroyElement: function() {
this.$("[rel=tooltip]").tooltip('destroy');
this.$(".alert-text").tooltip('destroy');
},
/**
* Router transition to service page
* @param event
*/
goToService: function (event) {
if (event && event.context) {
App.router.transitionTo('main.services.service.summary', event.context);
}
},
/**
* Router transition to host level alerts page
* @param {object} event
* @method goToHostAlerts
*/
goToHostAlerts: function (event) {
if (event && event.context) {
App.router.get('mainHostDetailsController').set('referer', App.router.location.lastSetURL);
App.router.transitionTo('main.hosts.hostDetails.alerts', event.context);
}
},
/**
* open popup that contain full response of Alert Instance
* @param {Object} event
*/
openFullResponse: function(event) {
App.showLogsPopup(Em.I18n.t('alerts.instance.fullLogPopup.header'), event.context.get('text'));
}
}),
paginationLeftClass: function () {
if (this.get("startIndex") > 1) {
return "paginate_previous";
}
return "paginate_disabled_previous";
}.property("startIndex", 'filteredCount'),
/**
* Determines how display "next"-link - as link or text
* @type {string}
*/
paginationRightClass: function () {
if (this.get("endIndex") < this.get("filteredCount")) {
return "paginate_next";
}
return "paginate_disabled_next";
}.property("endIndex", 'filteredCount'),
/**
* Show previous-page if user not in the first page
* @method previousPage
*/
previousPage: function () {
if (this.get('paginationLeftClass') === 'paginate_previous') {
this._super();
}
},
/**
* Show next-page if user not in the last page
* @method nextPage
*/
nextPage: function () {
if (this.get('paginationRightClass') === 'paginate_next') {
this._super();
}
}
});
App.AlertInstanceServiceHostView = Em.View.extend({
templateName: require('templates/main/alerts/instance_service_host'),
didInsertElement: function () {
App.tooltip(this.$("[rel='UsageTooltip']"));
},
willDestroyElement: function() {
this.$("[rel='UsageTooltip']").remove();
},
/**
* Define whether show link for transition to service page
*/
serviceIsLink: Em.computed.existsInByKey('instance.service.serviceName', 'App.services.all'),
/**
* Define whether show separator between service and hosts labels
*/
showSeparator: Em.computed.and('instance.serviceDisplayName', 'instance.hostName')
});
App.AlertInstanceStateView = Em.View.extend({
templateName: require('templates/main/alerts/alert_instance/status'),
didInsertElement: function () {
App.tooltip(this.$("[rel='StateTooltip']"));
App.tooltip(this.$("[rel='tooltip']"));
},
willDestroyElement: function() {
this.$("[rel='StateTooltip']").remove();
this.$("[rel='tooltip']").remove();
}
});