config_history_controller.js 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251
  1. /**
  2. * Licensed to the Apache Software Foundation (ASF) under one
  3. * or more contributor license agreements. See the NOTICE file
  4. * distributed with this work for additional information
  5. * regarding copyright ownership. The ASF licenses this file
  6. * to you under the Apache License, Version 2.0 (the
  7. * "License"); you may not use this file except in compliance
  8. * with the License. You may obtain a copy of the License at
  9. *
  10. * http://www.apache.org/licenses/LICENSE-2.0
  11. *
  12. * Unless required by applicable law or agreed to in writing, software
  13. * distributed under the License is distributed on an "AS IS" BASIS,
  14. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  15. * See the License for the specific language governing permissions and
  16. * limitations under the License.
  17. */
  18. var App = require('app');
  19. var customDatePopup = require('/views/common/custom_date_popup');
  20. App.MainConfigHistoryController = Em.ArrayController.extend(App.TableServerMixin, {
  21. name: 'mainConfigHistoryController',
  22. dataSource: App.ServiceConfigVersion.find(),
  23. content: function () {
  24. return this.get('dataSource').filterProperty('isRequested');
  25. }.property('dataSource.@each.isRequested'),
  26. isPolling: false,
  27. totalCount: 0,
  28. filteredCount: 0,
  29. timeoutRef: null,
  30. resetStartIndex: true,
  31. mockUrl: '/data/configurations/service_versions.json',
  32. realUrl: function () {
  33. 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&minimal_response=true';
  34. }.property('App.clusterName'),
  35. /**
  36. * associations between host property and column index
  37. * @type {Array}
  38. */
  39. colPropAssoc: function () {
  40. var associations = [];
  41. associations[1] = 'serviceVersion';
  42. associations[2] = 'configGroup';
  43. associations[3] = 'createTime';
  44. associations[4] = 'author';
  45. associations[5] = 'notes';
  46. return associations;
  47. }.property(),
  48. filterProps: [
  49. {
  50. name: 'serviceVersion',
  51. key: 'service_name',
  52. type: 'EQUAL'
  53. },
  54. {
  55. name: 'configGroup',
  56. key: 'group_name',
  57. type: 'EQUAL'
  58. },
  59. {
  60. name: 'createTime',
  61. key: 'createtime',
  62. type: 'MORE'
  63. },
  64. {
  65. name: 'author',
  66. key: 'user',
  67. type: 'MATCH'
  68. },
  69. {
  70. name: 'notes',
  71. key: 'service_config_version_note',
  72. type: 'MATCH'
  73. }
  74. ],
  75. sortProps: [
  76. {
  77. name: 'serviceVersion',
  78. key: 'service_name'
  79. },
  80. {
  81. name: 'configGroup',
  82. key: 'group_name'
  83. },
  84. {
  85. name: 'createTime',
  86. key: 'createtime'
  87. },
  88. {
  89. name: 'author',
  90. key: 'user'
  91. },
  92. {
  93. name: 'notes',
  94. key: 'service_config_version_note'
  95. }
  96. ],
  97. modifiedFilter: Em.Object.create({
  98. optionValue: 'Any',
  99. filterModified: function () {
  100. var time = "";
  101. var curTime = new Date().getTime();
  102. switch (this.get('optionValue.value')) {
  103. case 'Past 1 hour':
  104. time = curTime - 3600000;
  105. break;
  106. case 'Past 1 Day':
  107. time = curTime - 86400000;
  108. break;
  109. case 'Past 2 Days':
  110. time = curTime - 172800000;
  111. break;
  112. case 'Past 7 Days':
  113. time = curTime - 604800000;
  114. break;
  115. case 'Past 14 Days':
  116. time = curTime - 1209600000;
  117. break;
  118. case 'Past 30 Days':
  119. time = curTime - 2592000000;
  120. break;
  121. case 'Custom':
  122. case 'Custom2':
  123. customDatePopup.showCustomDatePopup(this, this.get('actualValues'));
  124. break;
  125. case 'Any':
  126. time = "";
  127. break;
  128. }
  129. if (this.get('modified') !== "Custom") {
  130. this.set("actualValues.startTime", time);
  131. this.set("actualValues.endTime", '');
  132. }
  133. }.observes('optionValue'),
  134. cancel: function () {
  135. this.set('optionValue', 'Any');
  136. },
  137. actualValues: Em.Object.create({
  138. startTime: "",
  139. endTime: ""
  140. })
  141. }),
  142. /**
  143. * load all data components required by config history table
  144. * - total counter of service config versions(called in parallel)
  145. * - current versions
  146. * - filtered versions
  147. * @return {*}
  148. */
  149. load: function () {
  150. var dfd = $.Deferred();
  151. this.updateTotalCounter();
  152. this.loadConfigVersionsToModel().done(function () {
  153. dfd.resolve();
  154. });
  155. return dfd.promise();
  156. },
  157. /**
  158. * get filtered service config versions from server and push it to model
  159. * @return {*}
  160. */
  161. loadConfigVersionsToModel: function () {
  162. var dfd = $.Deferred();
  163. var queryParams = this.getQueryParameters();
  164. App.HttpClient.get(this.getUrl(queryParams), App.serviceConfigVersionsMapper, {
  165. complete: function () {
  166. dfd.resolve();
  167. }
  168. });
  169. return dfd.promise();
  170. },
  171. updateTotalCounter: function () {
  172. return App.ajax.send({
  173. name: 'service.serviceConfigVersions.get.total',
  174. sender: this,
  175. data: {},
  176. success: 'updateTotalCounterSuccess'
  177. })
  178. },
  179. updateTotalCounterSuccess: function (data, opt, params) {
  180. this.set('totalCount', data.itemTotal);
  181. },
  182. getUrl: function (queryParams) {
  183. var params = '';
  184. if (App.get('testMode')) {
  185. return this.get('mockUrl');
  186. } else {
  187. if (queryParams) {
  188. params = App.router.get('updateController').computeParameters(queryParams);
  189. }
  190. return this.get('realUrl').replace('<parameters>', params);
  191. }
  192. },
  193. /**
  194. * request latest data from server and update content
  195. */
  196. doPolling: function () {
  197. var self = this;
  198. this.set('timeoutRef', setTimeout(function () {
  199. if (self.get('isPolling')) {
  200. self.load().done(function () {
  201. self.doPolling();
  202. })
  203. }
  204. }, App.componentsUpdateInterval));
  205. },
  206. /**
  207. * get sort properties from local db. A overridden funtion from parent
  208. * @return {Array}
  209. */
  210. getSortProps: function () {
  211. var savedSortConditions = App.db.getSortingStatuses(this.get('name')) || [],
  212. sortProperties = this.get('sortProps'),
  213. sortParams = [];
  214. savedSortConditions.forEach(function (sort) {
  215. var property = sortProperties.findProperty('name', sort.name);
  216. if (property && (sort.status === 'sorting_asc' || sort.status === 'sorting_desc')) {
  217. property.value = sort.status.replace('sorting_', '');
  218. property.type = 'SORT';
  219. if (property.name == 'serviceVersion'){
  220. property.key = "service_name." + sort.status.replace('sorting_', '') + ",service_config_version";
  221. property.value = "desc";
  222. }
  223. if (property.name == 'configGroup'){
  224. property.key = "group_name." + sort.status.replace('sorting_', '') + ",service_config_version";
  225. property.value = "desc";
  226. }
  227. sortParams.push(property);
  228. }
  229. });
  230. return sortParams;
  231. }
  232. });