123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495 |
- /**
- * 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 filters = require('views/common/filter_view'),
- sort = require('views/common/sort_view');
- App.MainAlertDefinitionsView = App.TableView.extend({
- templateName: require('templates/main/alerts'),
- content: [],
- contentObs: function () {
- Em.run.once(this, this.contentObsOnce);
- }.observes('controller.content.[]'),
- contentObsOnce: function() {
- var content = this.get('controller.content') ? this.get('controller.content').toArray().sort(App.AlertDefinition.getSortDefinitionsByStatus(true)) : [];
- this.set('content', content);
- },
- willInsertElement: function () {
- if (!this.get('controller.showFilterConditionsFirstLoad')) {
- this.clearFilterConditionsFromLocalStorage();
- }
- this._super();
- },
- didInsertElement: function () {
- var self = this;
- Em.run.next(function () {
- self.set('isInitialRendering', false);
- self.contentObsOnce();
- self.tooltipsUpdater();
- });
- },
- willDestroyElement: function () {
- $(".timeago").tooltip('destroy');
- this.removeObserver('pageContent.length', this, 'tooltipsUpdater');
- },
- /**
- * Save <code>startIndex</code> to the localStorage
- * @method saveStartIndex
- */
- saveStartIndex: function() {
- App.db.setStartIndex(this.get('controller.name'), this.get('startIndex'));
- }.observes('startIndex'),
- /**
- * Clear <code>startIndex</code> from the localStorage
- * @method clearStartIndex
- */
- clearStartIndex: function () {
- App.db.setStartIndex(this.get('controller.name'), null);
- },
- /**
- * @type {number}
- */
- totalCount: Em.computed.alias('content.length'),
- colPropAssoc: ['', 'label', 'summary', 'serviceName', 'type', 'lastTriggered', 'enabled', 'groups'],
- sortView: sort.wrapperView.extend({
- didInsertElement: function () {
- this._super();
- // set default sorting to status sorting
- var statusSortingView = this.get('childViews').findProperty('name', 'summary');
- this.set('controller.sortingColumn', statusSortingView);
- this.addSortingObserver(statusSortingView.get('name'))
- }
- }),
- /**
- * Define whether initial view rendering has finished
- * @type {Boolean}
- */
- isInitialRendering: true,
- /**
- * Sorting header for <label>alertDefinition.label</label>
- * @type {Em.View}
- */
- nameSort: sort.fieldView.extend({
- column: 1,
- name: 'label',
- displayName: Em.I18n.t('alerts.table.header.definitionName')
- }),
- /**
- * Sorting header for <label>alertDefinition.status</label>
- * @type {Em.View}
- */
- statusSort: sort.fieldView.extend({
- column: 2,
- name: 'summary',
- displayName: Em.I18n.t('common.status'),
- type: 'alert_status',
- status: 'sorting_desc'
- }),
- /**
- * Sorting header for <label>alertDefinition.service.serviceName</label>
- * @type {Em.View}
- */
- serviceSort: sort.fieldView.extend({
- column: 3,
- name: 'serviceDisplayName',
- displayName: Em.I18n.t('common.service'),
- type: 'string'
- }),
- /**
- * Sorting header for <label>alertDefinition.type</label>
- * @type {Em.View}
- */
- typeSort: sort.fieldView.extend({
- column: 4,
- name: 'type',
- displayName: Em.I18n.t('common.type'),
- type: 'string'
- }),
- /**
- * Sorting header for <label>alertDefinition.lastTriggeredSort</label>
- * @type {Em.View}
- */
- lastTriggeredSort: sort.fieldView.extend({
- column: 5,
- name: 'lastTriggered',
- displayName: Em.I18n.t('alerts.table.header.lastTriggered'),
- type: 'number'
- }),
- /**
- * Sorting header for <label>alertDefinition.enabled</label>
- * @type {Em.View}
- */
- enabledSort: sort.fieldView.extend({
- template:Em.Handlebars.compile('<span {{bindAttr class="view.status :column-name"}}>{{t alerts.table.state}}</span>'),
- column: 6,
- name: 'enabled'
- }),
- /**
- * Filtering header for <label>alertDefinition.label</label>
- * @type {Em.View}
- */
- nameFilterView: filters.createTextView({
- column: 1,
- fieldType: 'filter-input-width',
- onChangeValue: function(){
- this.get('parentView').updateFilter(this.get('column'), this.get('value'), 'string');
- }
- }),
- /**
- * Filtering header for <label>alertDefinition.status</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'), 'alert_status');
- }
- }),
- /**
- * Filtering header for <label>alertDefinition.service.serviceName</label>
- * @type {Em.View}
- */
- serviceFilterView: filters.createSelectView({
- column: 3,
- fieldType: 'filter-input-width',
- content: filters.getComputedServicesList(),
- onChangeValue: function () {
- this.get('parentView').updateFilter(this.get('column'), this.get('value'), 'select');
- }
- }),
- /**
- * Filtering header for <label>alertDefinition.type</label>
- * @type {Em.View}
- */
- typeFilterView: filters.createSelectView({
- column: 4,
- fieldType: 'filter-input-width',
- content: [
- {
- value: '',
- label: Em.I18n.t('common.all')
- },
- {
- value: 'SCRIPT',
- label: 'SCRIPT'
- },
- {
- value: 'WEB',
- label: 'WEB'
- },
- {
- value: 'PORT',
- label: 'PORT'
- },
- {
- value: 'METRIC',
- label: 'METRIC'
- },
- {
- value: 'AGGREGATE',
- label: 'AGGREGATE'
- },
- {
- value: 'SERVER',
- label: 'SERVER'
- },
- {
- value: 'RECOVERY',
- label: 'RECOVERY'
- }
- ],
- onChangeValue: function(){
- this.get('parentView').updateFilter(this.get('column'), this.get('value'), 'select');
- }
- }),
- /**
- * Filtering header for <label>alertDefinition.lastTriggered</label>
- * @type {Em.View}
- */
- triggeredFilterView: filters.createSelectView({
- column: 5,
- appliedEmptyValue: ["", ""],
- fieldType: 'filter-input-width,modified-filter',
- content: [
- {
- value: 'Any',
- label: Em.I18n.t('any')
- },
- {
- value: 'Past 1 hour',
- label: 'Past 1 hour'
- },
- {
- value: 'Past 1 Day',
- label: 'Past 1 Day'
- },
- {
- value: 'Past 2 Days',
- label: 'Past 2 Days'
- },
- {
- value: 'Past 7 Days',
- label: 'Past 7 Days'
- },
- {
- value: 'Past 14 Days',
- label: 'Past 14 Days'
- },
- {
- value: 'Past 30 Days',
- label: 'Past 30 Days'
- }
- ],
- emptyValue: 'Any',
- onChangeValue: function () {
- this.get('parentView').updateFilter(this.get('column'), this.get('value'), 'date');
- }
- }),
- /**
- * Filtering header for <label>alertDefinition.enabled</label>
- * @type {Em.View}
- */
- enabledFilterView: filters.createSelectView({
- column: 6,
- fieldType: 'filter-input-width',
- content: [
- {
- value: '',
- label: Em.I18n.t('common.all')
- },
- {
- value: 'enabled',
- label: Em.I18n.t('alerts.table.state.enabled')
- },
- {
- value: 'disabled',
- label: Em.I18n.t('alerts.table.state.disabled')
- }
- ],
- onChangeValue: function () {
- this.get('parentView').updateFilter(this.get('column'), this.get('value'), 'enable_disable');
- }
- }),
- /**
- * Filtering header for <label>alertDefinition</label> groups
- * @type {Em.View}
- */
- alertGroupFilterView: filters.createSelectView({
- column: 7,
- fieldType: 'filter-input-width',
- template: Ember.Handlebars.compile(
- '<div class="btn-group display-inline-block">' +
- '<a class="btn dropdown-toggle" data-toggle="dropdown" href="#">' +
- '<span class="filters-label">Groups: </span>' +
- '<span>{{view.selected.label}} <span class="caret"></span></span>' +
- '</a>' +
- '<ul class="dropdown-menu alert-groups-dropdown">' +
- '{{#each category in view.content}}' +
- '<li {{bindAttr class=":category-item category.selected:active"}}>' +
- '<a {{action selectCategory category target="view"}} href="#">' +
- '<span {{bindAttr class="category.class"}}></span>{{category.label}}</a>' +
- '</li>'+
- '{{/each}}' +
- '</ul>'+
- '</div>'
- ),
- content: [],
- didInsertElement: function() {
- this._super();
- this.updateContent();
- this.set('value', '');
- },
- emptyValue: '',
- /**
- * Update list of <code>App.AlertGroup</code> used in the filter
- * @method updateContent
- */
- updateContent: function() {
- var defaultGroups = [];
- var customGroups = [];
- App.AlertGroup.find().forEach(function (group) {
- var item = Em.Object.create({
- value: group.get('id'),
- label: group.get('displayNameDefinitions')
- });
- if (group.get('default')) {
- defaultGroups.push(item);
- } else {
- customGroups.push(item);
- }
- });
- defaultGroups = defaultGroups.sortProperty('label');
- customGroups = customGroups.sortProperty('label');
- this.set('content', [
- Em.Object.create({
- value: '',
- label: Em.I18n.t('common.all') + ' (' + this.get('parentView.controller.content.length') + ')'
- })
- ].concat(defaultGroups, customGroups));
- this.onValueChange();
- }.observes('App.router.clusterController.isLoaded', 'App.router.manageAlertGroupsController.changeTrigger'),
- selectCategory: function (event) {
- var category = event.context;
- this.set('value', category.value);
- this.get('parentView').updateFilter(this.get('column'), category.value, 'alert_group');
- },
- onValueChange: function () {
- var value = this.get('value');
- if (value !== undefined) {
- this.get('content').setEach('selected', false);
- this.set('selected', this.get('content').findProperty('value', value));
- var selectEntry = this.get('content').findProperty('value', value);
- if (selectEntry) {
- selectEntry.set('selected', true);
- }
- this.get('parentView').updateFilter(this.get('column'), value, 'alert_group');
- } else {
- this.set('value', '');
- this.get('parentView').updateFilter(this.get('column'), '', 'alert_group');
- }
- }.observes('value')
- }),
- /**
- * Filtered number of all content number information displayed on the page footer bar
- * @returns {String}
- */
- filteredContentInfo: Em.computed.i18nFormat('alerts.filters.filteredAlertsInfo', 'filteredCount', 'totalCount'),
- /**
- * Determines how display "back"-link - as link or text
- * @type {string}
- */
- 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();
- }
- this.tooltipsUpdater();
- },
- /**
- * Show next-page if user not in the last page
- * @method nextPage
- */
- nextPage: function () {
- if (this.get('paginationRightClass') === 'paginate_next') {
- this._super();
- }
- this.tooltipsUpdater();
- },
- /**
- * Update tooltips when <code>pageContent</code> is changed
- * @method tooltipsUpdater
- */
- tooltipsUpdater: function () {
- Em.run.next(this, function () {
- App.tooltip($(".timeago"));
- });
- },
- updateFilter: function (iColumn, value, type) {
- if (!this.get('isInitialRendering')) {
- this._super(iColumn, value, type);
- }
- this.tooltipsUpdater();
- }
- });
|