Cluster.js 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286
  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. 'use strict';
  19. angular.module('ambariAdminConsole')
  20. .factory('Cluster', ['$http', '$q', 'Settings', function($http, $q, Settings) {
  21. return {
  22. repoStatusCache : {},
  23. orderedRoles : [
  24. 'CLUSTER.ADMINISTRATOR',
  25. 'CLUSTER.OPERATOR',
  26. 'SERVICE.ADMINISTRATOR',
  27. 'SERVICE.OPERATOR',
  28. 'CLUSTER.USER'
  29. ],
  30. orderedLevels: ['SERVICE', 'HOST', 'CLUSTER', 'AMBARI'],
  31. ineditableRoles : ['VIEW.USER', 'AMBARI.ADMINISTRATOR'],
  32. getAllClusters: function() {
  33. var deferred = $q.defer();
  34. $http.get(Settings.baseUrl + '/clusters?fields=Clusters/cluster_id', {mock: 'cluster/clusters.json'})
  35. .then(function(data, status, headers) {
  36. deferred.resolve(data.data.items);
  37. })
  38. .catch(function(data) {
  39. deferred.reject(data);
  40. });
  41. return deferred.promise;
  42. },
  43. getStatus: function() {
  44. var deferred = $q.defer();
  45. $http.get(Settings.baseUrl + '/clusters?fields=Clusters/provisioning_state', {mock: 'cluster/init.json'})
  46. .then(function(data, status, headers) {
  47. deferred.resolve(data.data.items[0]);
  48. })
  49. .catch(function(data) {
  50. deferred.reject(data);
  51. });
  52. return deferred.promise;
  53. },
  54. getAmbariVersion: function() {
  55. var deferred = $q.defer();
  56. $http.get(Settings.baseUrl + '/services/AMBARI/components/AMBARI_SERVER?fields=RootServiceComponents/component_version,RootServiceComponents/properties/server.os_family&minimal_response=true', {mock: '2.1'})
  57. .then(function(data) {
  58. deferred.resolve(data.data.RootServiceComponents.component_version);
  59. })
  60. .catch(function(data) {
  61. deferred.reject(data);
  62. });
  63. return deferred.promise;
  64. },
  65. getClusterOS: function() {
  66. var deferred = $q.defer();
  67. $http.get(Settings.baseUrl + '/services/AMBARI/components/AMBARI_SERVER?fields=RootServiceComponents/properties/server.os_family&minimal_response=true', {mock: 'redhat6'})
  68. .then(function(data) {
  69. deferred.resolve(data.data.RootServiceComponents.properties['server.os_family']);
  70. })
  71. .catch(function(data) {
  72. deferred.reject(data);
  73. });
  74. return deferred.promise;
  75. },
  76. getAmbariTimeout: function() {
  77. var deferred = $q.defer();
  78. var url = '/services/AMBARI/components/AMBARI_SERVER?fields=RootServiceComponents/properties/user.inactivity.timeout.default';
  79. $http.get(Settings.baseUrl + url)
  80. .then(function(data) {
  81. var properties = data.data.RootServiceComponents.properties;
  82. var timeout = properties? properties['user.inactivity.timeout.default'] : 0;
  83. deferred.resolve(timeout);
  84. })
  85. .catch(function(data) {
  86. deferred.reject(data);
  87. });
  88. return deferred.promise;
  89. },
  90. getPermissions: function() {
  91. var deferred = $q.defer();
  92. $http({
  93. method: 'GET',
  94. url: Settings.baseUrl + '/permissions',
  95. mock: 'permission/permissions.json',
  96. params: {
  97. fields: 'PermissionInfo',
  98. 'PermissionInfo/resource_name': 'CLUSTER'
  99. }
  100. })
  101. .success(function(data) {
  102. deferred.resolve(data.items);
  103. })
  104. .catch(function(data) {
  105. deferred.reject(data); });
  106. return deferred.promise;
  107. },
  108. getRolesWithAuthorizations: function() {
  109. var self = this;
  110. var deferred = $q.defer();
  111. $http({
  112. method: 'GET',
  113. url: Settings.baseUrl + '/permissions?PermissionInfo/resource_name.in(CLUSTER,AMBARI)',
  114. mock: 'permission/permissions.json',
  115. params: {
  116. fields: 'PermissionInfo/*,authorizations/AuthorizationInfo/*'
  117. }
  118. })
  119. .success(function(data) {
  120. deferred.resolve(data.items);
  121. })
  122. .catch(function(data) {
  123. deferred.reject(data); });
  124. return deferred.promise;
  125. },
  126. getPrivileges: function(params) {
  127. var deferred = $q.defer();
  128. $http({
  129. method: 'GET',
  130. url: Settings.baseUrl + '/clusters/'+params.clusterId,
  131. params : {
  132. 'fields': 'privileges/PrivilegeInfo'
  133. }
  134. })
  135. .success(function(data) {
  136. deferred.resolve(data.privileges);
  137. })
  138. .catch(function(data) {
  139. deferred.reject(data);
  140. });
  141. return deferred.promise;
  142. },
  143. getPrivilegesWithFilters: function(params) {
  144. var deferred = $q.defer();
  145. var isUser = params.typeFilter.value == 'USER';
  146. var endpoint = isUser? '/users' : '/groups';
  147. var nameURL = isUser? '&Users/user_name.matches(.*' : '&Groups/group_name.matches(.*';
  148. var nameFilter = params.nameFilter? nameURL + params.nameFilter + '.*)' : '';
  149. var roleFilter = params.roleFilter.value? '&privileges/PrivilegeInfo/permission_name.matches(.*' + params.roleFilter.value + '.*)' : '';
  150. $http({
  151. method: 'GET',
  152. url: Settings.baseUrl + endpoint + '?'
  153. + 'fields=privileges/PrivilegeInfo/*'
  154. + nameFilter
  155. + roleFilter
  156. + '&from=' + (params.currentPage - 1) * params.usersPerPage
  157. + '&page_size=' + params.usersPerPage
  158. })
  159. .success(function(data) {
  160. deferred.resolve(data);
  161. })
  162. .catch(function(data) {
  163. deferred.reject(data);
  164. });
  165. return deferred.promise;
  166. },
  167. getPrivilegesForResource: function(params) {
  168. var deferred = $q.defer();
  169. var isUser = (params.typeFilter.value == 'USER');
  170. var endpoint = isUser ? '/users' : '/groups';
  171. var nameURL = isUser ? '&Users/user_name.matches(' : '&Groups/group_name.matches(';
  172. var nameFilter = params.nameFilter ? (nameURL + params.nameFilter + ')') : '';
  173. $http({
  174. method : 'GET',
  175. url : Settings.baseUrl + endpoint + '?' + 'fields=privileges/PrivilegeInfo/*' + nameFilter
  176. })
  177. .success(function(data) {
  178. deferred.resolve(data);
  179. })
  180. .catch(function(data) {
  181. deferred.reject(data);
  182. });
  183. return deferred.promise;
  184. },
  185. createPrivileges: function(params, data) {
  186. return $http({
  187. method: 'POST',
  188. url: Settings.baseUrl + '/clusters/'+params.clusterId+'/privileges',
  189. data: data
  190. });
  191. },
  192. deletePrivileges: function(params, data) {
  193. return $http({
  194. method: 'DELETE',
  195. url: Settings.baseUrl + '/clusters/'+params.clusterId+'/privileges',
  196. data: data
  197. });
  198. },
  199. deleteMultiplePrivileges: function(clusterId, privilege_ids) {
  200. return $http({
  201. method: 'DELETE',
  202. url: Settings.baseUrl + '/clusters/'+clusterId+'/privileges?PrivilegeInfo/privilege_id.in\('+privilege_ids+'\)'
  203. });
  204. },
  205. updatePrivileges: function(params, privileges) {
  206. return $http({
  207. method: 'PUT',
  208. url: Settings.baseUrl + '/clusters/' + params.clusterId + '/privileges',
  209. data: privileges
  210. });
  211. },
  212. deletePrivilege: function(clusterId, id) {
  213. return $http({
  214. method: 'DELETE',
  215. url: Settings.baseUrl + '/clusters/'+clusterId+'/privileges/' + id
  216. });
  217. },
  218. editName: function(oldName, newName) {
  219. return $http({
  220. method: 'PUT',
  221. url: Settings.baseUrl + '/clusters/' + oldName,
  222. data: {
  223. Clusters: {
  224. "cluster_name": newName
  225. }
  226. }
  227. });
  228. },
  229. getRepoVersionStatus: function (clusterName, repoId ) {
  230. var me = this;
  231. var deferred = $q.defer();
  232. var url = Settings.baseUrl + '/clusters/' + clusterName +
  233. '/stack_versions?fields=*&ClusterStackVersions/repository_version=' + repoId;
  234. $http.get(url, {mock: 'cluster/repoVersionStatus.json'})
  235. .success(function (data) {
  236. data = data.items;
  237. var response = {};
  238. if (data.length > 0) {
  239. var hostStatus = data[0].ClusterStackVersions.host_states;
  240. var currentHosts = hostStatus['CURRENT'].length;
  241. var installedHosts = hostStatus['INSTALLED'].length;
  242. var totalHosts = 0;
  243. // collect hosts on all status
  244. angular.forEach(hostStatus, function(status) {
  245. totalHosts += status.length;
  246. });
  247. response.status = currentHosts > 0? 'current' :
  248. installedHosts > 0? 'installed' : '';
  249. response.currentHosts = currentHosts;
  250. response.installedHosts = installedHosts;
  251. response.totalHosts = totalHosts;
  252. response.stackVersionId = data[0].ClusterStackVersions.id;
  253. } else {
  254. response.status = '';
  255. }
  256. me.repoStatusCache[repoId] = response.status;
  257. deferred.resolve(response);
  258. })
  259. .catch(function (data) {
  260. deferred.reject(data);
  261. });
  262. return deferred.promise;
  263. }
  264. };
  265. }]);