blob: ffef7e4d9f8a7247702f4a48fec21cfb973e1654 [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');
App.MainConfigHistoryController = Em.ArrayController.extend(App.TableServerMixin, {
name: 'mainConfigHistoryController',
content: App.ServiceConfigVersion.find(),
totalCount: 0,
filteredCount: 0,
resetStartIndex: true,
mockUrl: '/data/configurations/service_versions.json',
realUrl: function () {
return App.apiPrefix + '/clusters/' + App.get('clusterName') + '/configurations/service_config_versions?<parameters>fields=service_config_version,user,group_id,group_name,is_current,createtime,service_name,hosts,service_config_version_note,is_cluster_compatible,stack_id&minimal_response=true';
}.property('App.clusterName'),
/**
* @type {boolean}
* @default false
*/
showFilterConditionsFirstLoad: false,
/**
* associations between host property and column index
* @type {Array}
*/
colPropAssoc: function () {
var associations = [];
associations[1] = 'serviceVersion';
associations[2] = 'configGroup';
associations[3] = 'createTime';
associations[4] = 'author';
associations[5] = 'notes';
return associations;
}.property(),
filterProps: [
{
name: 'serviceVersion',
key: 'service_name',
type: 'EQUAL'
},
{
name: 'configGroup',
key: 'group_name',
type: 'EQUAL'
},
{
name: 'createTime',
key: 'createtime',
type: 'MORE'
},
{
name: 'author',
key: 'user',
type: 'MATCH'
},
{
name: 'notes',
key: 'service_config_version_note',
type: 'MATCH'
}
],
sortProps: [
{
name: 'serviceVersion',
key: 'service_name'
},
{
name: 'configGroup',
key: 'group_name'
},
{
name: 'createTime',
key: 'createtime'
},
{
name: 'author',
key: 'user'
},
{
name: 'notes',
key: 'service_config_version_note'
}
],
/**
* load all data components required by config history table
* - total counter of service config versions(called in parallel)
* - current versions
* - filtered versions
* @param {boolean} shouldUpdateCounter
* @return {*}
*/
load: function (shouldUpdateCounter = false) {
const dfd = $.Deferred();
this.loadConfigVersionsToModel().done(() => {
if (shouldUpdateCounter) {
this.updateTotalCounter();
}
dfd.resolve();
});
return dfd.promise();
},
/**
* get filtered service config versions from server and push it to model
* @return {*}
*/
loadConfigVersionsToModel: function () {
var dfd = $.Deferred();
var queryParams = this.getQueryParameters();
App.HttpClient.get(this.getUrl(queryParams), App.serviceConfigVersionsMapper, {
complete: function () {
dfd.resolve();
}
});
return dfd.promise();
},
updateTotalCounter: function () {
return App.ajax.send({
name: 'service.serviceConfigVersions.get.total',
sender: this,
data: {},
success: 'updateTotalCounterSuccess'
})
},
updateTotalCounterSuccess: function (data, opt, params) {
this.set('totalCount', Number(data.itemTotal));
},
getUrl: function (queryParams) {
var params = '';
if (App.get('testMode')) {
return this.get('mockUrl');
} else {
if (queryParams) {
params = App.router.get('updateController').computeParameters(queryParams);
}
params = (params.length > 0) ? params + "&" : params;
return this.get('realUrl').replace('<parameters>', params);
}
},
subscribeToUpdates: function() {
App.StompClient.addHandler('/events/configs', 'history', this.load.bind(this, true));
},
unsubscribeOfUpdates: function() {
App.StompClient.removeHandler('/events/configs', 'history');
},
/**
* get sort properties from local db. A overridden funtion from parent
* @return {Array}
*/
getSortProps: function () {
var savedSortConditions = App.db.getSortingStatuses(this.get('name')) || [],
sortProperties = this.get('sortProps'),
sortParams = [];
savedSortConditions.forEach(function (sort) {
var property = sortProperties.findProperty('name', sort.name);
if (property && (sort.status === 'sorting_asc' || sort.status === 'sorting_desc')) {
property.value = sort.status.replace('sorting_', '');
property.type = 'SORT';
if (property.name == 'serviceVersion'){
property.key = "service_name." + sort.status.replace('sorting_', '') + ",service_config_version";
property.value = "desc";
}
if (property.name == 'configGroup'){
property.key = "group_name." + sort.status.replace('sorting_', '') + ",service_config_version";
property.value = "desc";
}
sortParams.push(property);
}
});
return sortParams;
},
/**
*
* @param {string} name
*/
getSearchBoxSuggestions: function(name) {
const dfd = $.Deferred();
const key = this.get('filterProps').findProperty('name', name).key;
App.ajax.send({
name: 'service.serviceConfigVersions.get.suggestions',
sender: this,
data: {
key
}
})
.done((data) => {dfd.resolve(data.items.mapProperty(key).uniq());})
.fail(() => {dfd.resolve([]);});
return dfd.promise();
}
});