main.js 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796
  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 stringUtils = require('utils/string_utils');
  20. module.exports = Em.Route.extend(App.RouterRedirections, {
  21. route: '/main',
  22. enter: function (router) {
  23. App.db.updateStorage();
  24. var self = this;
  25. var location = router.location.location.hash;
  26. router.getAuthenticated().done(function (loggedIn) {
  27. if (loggedIn) {
  28. var applicationController = App.router.get('applicationController');
  29. App.router.get('experimentalController').loadSupports().complete(function () {
  30. applicationController.startKeepAlivePoller();
  31. App.router.get('mainController').checkServerClientVersion().done(function () {
  32. App.router.get('mainViewsController').loadAmbariViews();
  33. App.router.get('clusterController').loadClusterName(false).done(function () {
  34. if (App.get('testMode')) {
  35. router.get('mainController').initialize();
  36. } else {
  37. if (router.get('clusterInstallCompleted')) {
  38. App.router.get('clusterController').loadClientServerClockDistance().done(function () {
  39. if (!App.get('isOnlyViewUser')) {
  40. App.router.get('clusterController').checkDetailedRepoVersion().done(function () {
  41. router.get('mainController').initialize();
  42. });
  43. } else {
  44. App.router.transitionTo('main.views.index');
  45. App.router.get('clusterController').set('isLoaded', true); // hide loading bar
  46. }
  47. });
  48. }
  49. else {
  50. Em.run.next(function () {
  51. App.clusterStatus.updateFromServer().complete(function () {
  52. var currentClusterStatus = App.clusterStatus.get('value');
  53. if (router.get('currentState.parentState.name') !== 'views' && router.get('currentState.parentState.name') !== 'view'
  54. && currentClusterStatus && self.get('installerStatuses').contains(currentClusterStatus.clusterState)) {
  55. if (App.isAuthorized('AMBARI.ADD_DELETE_CLUSTERS')) {
  56. self.redirectToInstaller(router, currentClusterStatus, false);
  57. } else {
  58. Em.run.next(function () {
  59. App.router.transitionTo('main.views.index');
  60. });
  61. }
  62. }
  63. });
  64. });
  65. App.router.get('clusterController').set('isLoaded', true);
  66. }
  67. }
  68. });
  69. });
  70. // TODO: redirect to last known state
  71. });
  72. } else {
  73. router.savePreferedPath(location);
  74. Em.run.next(function () {
  75. router.transitionTo('login');
  76. });
  77. }
  78. });
  79. },
  80. /*
  81. routePath: function(router,event) {
  82. if (router.getAuthenticated()) {
  83. App.router.get('clusterController').loadClusterName(false);
  84. router.get('mainController').initialize();
  85. // TODO: redirect to last known state
  86. } else {
  87. Ember.run.next(function () {
  88. router.transitionTo('login');
  89. });
  90. }
  91. }, */
  92. index: Ember.Route.extend({
  93. route: '/',
  94. redirectsTo: 'dashboard.index'
  95. }),
  96. connectOutlets: function (router, context) {
  97. router.get('applicationController').connectOutlet('main');
  98. },
  99. test: Em.Route.extend({
  100. route: '/test',
  101. connectOutlets: function (router, context) {
  102. router.get('mainController').connectOutlet('mainTest');
  103. }
  104. }),
  105. dashboard: Em.Route.extend({
  106. route: '/dashboard',
  107. connectOutlets: function (router, context) {
  108. router.get('mainController').connectOutlet('mainDashboard');
  109. },
  110. index: Em.Route.extend({
  111. route: '/',
  112. enter: function (router) {
  113. Em.run.next(function () {
  114. router.transitionTo('main.dashboard.widgets');
  115. });
  116. }
  117. }),
  118. goToDashboardView: function (router, event) {
  119. router.transitionTo(event.context);
  120. },
  121. widgets: Em.Route.extend({
  122. route: '/metrics',
  123. connectOutlets: function (router, context) {
  124. App.loadTimer.start('Dashboard Metrics Page');
  125. router.set('mainDashboardController.selectedCategory', 'widgets');
  126. router.get('mainDashboardController').connectOutlet('mainDashboardWidgets');
  127. }
  128. }),
  129. charts: Em.Route.extend({
  130. route: '/charts',
  131. connectOutlets: function (router, context) {
  132. App.loadTimer.start('Heatmaps Page');
  133. router.set('mainDashboardController.selectedCategory', 'charts');
  134. router.get('mainDashboardController').connectOutlet('mainCharts');
  135. },
  136. index: Ember.Route.extend({
  137. route: '/',
  138. enter: function (router) {
  139. Em.run.next(function () {
  140. router.transitionTo('heatmap');
  141. });
  142. }
  143. }),
  144. heatmap: Em.Route.extend({
  145. route: '/heatmap',
  146. connectOutlets: function (router, context) {
  147. router.get('mainController').dataLoading().done(function () {
  148. router.get('mainChartsController').connectOutlet('mainChartsHeatmap');
  149. });
  150. }
  151. }),
  152. horizon_chart: Em.Route.extend({
  153. route: '/horizon_chart',
  154. connectOutlets: function (router, context) {
  155. router.get('mainChartsController').connectOutlet('mainChartsHorizon');
  156. }
  157. }),
  158. showChart: function (router, event) {
  159. var parent = event.view._parentView;
  160. parent.deactivateChildViews();
  161. event.view.set('active', "active");
  162. router.transitionTo(event.context);
  163. }
  164. }),
  165. configHistory: Em.Route.extend({
  166. route: '/config_history',
  167. connectOutlets: function (router, context) {
  168. App.loadTimer.start('Config History Page');
  169. router.set('mainDashboardController.selectedCategory', 'configHistory');
  170. router.get('mainDashboardController').connectOutlet('mainConfigHistory');
  171. }
  172. }),
  173. goToServiceConfigs: function (router, event) {
  174. router.get('mainServiceItemController').set('routeToConfigs', true);
  175. router.get('mainServiceInfoConfigsController').set('preSelectedConfigVersion', event.context);
  176. router.transitionTo('main.services.service.configs', App.Service.find(event.context.get('serviceName')));
  177. router.get('mainServiceItemController').set('routeToConfigs', false);
  178. }
  179. }),
  180. views: require('routes/views'),
  181. view: require('routes/view'),
  182. hosts: Em.Route.extend({
  183. route: '/hosts',
  184. index: Ember.Route.extend({
  185. route: '/',
  186. connectOutlets: function (router, context) {
  187. App.loadTimer.start('Hosts Page');
  188. router.get('mainController').connectOutlet('mainHost');
  189. router.get('mainHostController').connectOutlet('mainHostComboSearchBox');
  190. }
  191. }),
  192. hostDetails: Em.Route.extend({
  193. route: '/:host_id',
  194. connectOutlets: function (router, host) {
  195. router.get('mainHostController').set('showFilterConditionsFirstLoad', true);
  196. router.get('mainController').connectOutlet('mainHostDetails', host);
  197. },
  198. index: Ember.Route.extend({
  199. route: '/',
  200. redirectsTo: 'summary'
  201. }),
  202. summary: Em.Route.extend({
  203. route: '/summary',
  204. connectOutlets: function (router, context) {
  205. router.get('mainController').dataLoading().done(function() {
  206. var controller = router.get('mainHostDetailsController');
  207. if ( App.Service.find().mapProperty('serviceName').contains('OOZIE')) {
  208. controller.loadConfigs('loadOozieConfigs');
  209. controller.isOozieConfigLoaded.always(function () {
  210. controller.connectOutlet('mainHostSummary');
  211. });
  212. } else {
  213. controller.connectOutlet('mainHostSummary');
  214. }
  215. });
  216. }
  217. }),
  218. configs: Em.Route.extend({
  219. route: '/configs',
  220. connectOutlets: function (router, context) {
  221. router.get('mainController').isLoading.call(router.get('clusterController'), 'isConfigsPropertiesLoaded').done(function () {
  222. router.get('mainHostDetailsController').connectOutlet('mainHostConfigs');
  223. });
  224. }
  225. }),
  226. alerts: Em.Route.extend({
  227. route: '/alerts',
  228. connectOutlets: function (router, context) {
  229. router.get('mainHostDetailsController').connectOutlet('mainHostAlerts');
  230. },
  231. exit: function (router) {
  232. router.set('mainAlertInstancesController.isUpdating', false);
  233. }
  234. }),
  235. metrics: Em.Route.extend({
  236. route: '/metrics',
  237. connectOutlets: function (router, context) {
  238. router.get('mainHostDetailsController').connectOutlet('mainHostMetrics');
  239. }
  240. }),
  241. stackVersions: Em.Route.extend({
  242. route: '/stackVersions',
  243. connectOutlets: function (router, context) {
  244. if (App.get('stackVersionsAvailable')) {
  245. router.get('mainHostDetailsController').connectOutlet('mainHostStackVersions');
  246. }
  247. else {
  248. router.transitionTo('summary');
  249. }
  250. }
  251. }),
  252. logs: Em.Route.extend({
  253. route: '/logs:query',
  254. connectOutlets: function (router, context) {
  255. if (App.get('supports.logSearch')) {
  256. router.get('mainHostDetailsController').connectOutlet('mainHostLogs')
  257. } else {
  258. router.transitionTo('summary');
  259. }
  260. },
  261. serialize: function(router, params) {
  262. return this.serializeQueryParams(router, params, 'mainHostDetailsController');
  263. }
  264. }),
  265. hostNavigate: function (router, event) {
  266. var parent = event.view._parentView;
  267. parent.deactivateChildViews();
  268. event.view.set('active', "active");
  269. router.transitionTo(event.context);
  270. }
  271. }),
  272. back: function (router, event) {
  273. var referer = router.get('mainHostDetailsController.referer');
  274. if (referer) {
  275. router.route(referer);
  276. }
  277. else {
  278. window.history.back();
  279. }
  280. },
  281. addHost: function (router) {
  282. router.transitionTo('hostAdd');
  283. }
  284. }),
  285. hostAdd: require('routes/add_host_routes'),
  286. alerts: Em.Route.extend({
  287. route: '/alerts',
  288. index: Em.Route.extend({
  289. route: '/',
  290. connectOutlets: function (router, context) {
  291. router.get('mainController').connectOutlet('mainAlertDefinitions');
  292. }
  293. }),
  294. alertDetails: Em.Route.extend({
  295. route: '/:alert_definition_id',
  296. connectOutlets: function (router, alertDefinition) {
  297. App.router.set('mainAlertDefinitionsController.showFilterConditionsFirstLoad', true);
  298. router.get('mainController').connectOutlet('mainAlertDefinitionDetails', alertDefinition);
  299. },
  300. exit: function (router) {
  301. router.set('mainAlertInstancesController.isUpdating', false);
  302. },
  303. exitRoute: function (router, context, callback) {
  304. var controller = router.get('mainAlertDefinitionDetailsController');
  305. if (controller.get('isEditing')) {
  306. controller.showSavePopup(callback);
  307. } else {
  308. callback();
  309. }
  310. }
  311. }),
  312. back: function (router, event) {
  313. window.history.back();
  314. }
  315. }),
  316. alertAdd: require('routes/add_alert_definition_routes'),
  317. admin: Em.Route.extend({
  318. route: '/admin',
  319. enter: function (router, transition) {
  320. if (router.get('loggedIn') && !App.isAuthorized('CLUSTER.TOGGLE_KERBEROS, SERVICE.SET_SERVICE_USERS_GROUPS, CLUSTER.UPGRADE_DOWNGRADE_STACK, CLUSTER.VIEW_STACK_DETAILS')
  321. && !(App.get('upgradeInProgress') || App.get('upgradeHolding'))) {
  322. Em.run.next(function () {
  323. router.transitionTo('main.dashboard.index');
  324. });
  325. }
  326. },
  327. routePath: function (router, event) {
  328. if (!App.isAuthorized('CLUSTER.UPGRADE_DOWNGRADE_STACK') && !(App.get('upgradeInProgress') || App.get('upgradeHolding'))) {
  329. Em.run.next(function () {
  330. App.router.transitionTo('main.dashboard.index');
  331. });
  332. } else {
  333. this._super(router, event);
  334. }
  335. },
  336. connectOutlets: function (router, context) {
  337. router.get('mainController').connectOutlet('mainAdmin');
  338. },
  339. index: Em.Route.extend({
  340. route: '/',
  341. redirectsTo: 'stackAndUpgrade.index'
  342. }),
  343. adminAuthentication: Em.Route.extend({
  344. route: '/authentication',
  345. connectOutlets: function (router, context) {
  346. router.set('mainAdminController.category', "authentication");
  347. router.get('mainAdminController').connectOutlet('mainAdminAuthentication');
  348. }
  349. }),
  350. adminKerberos: Em.Route.extend({
  351. route: '/kerberos',
  352. enter: function (router, transition) {
  353. if (router.get('loggedIn') && !App.isAuthorized('CLUSTER.TOGGLE_KERBEROS')) {
  354. router.transitionTo('main.dashboard.index');
  355. }
  356. },
  357. index: Em.Route.extend({
  358. route: '/',
  359. connectOutlets: function (router, context) {
  360. router.set('mainAdminController.category', "kerberos");
  361. router.get('mainAdminController').connectOutlet('mainAdminKerberos');
  362. }
  363. }),
  364. adminAddKerberos: require('routes/add_kerberos_routes'),
  365. disableSecurity: Em.Route.extend({
  366. route: '/disableSecurity',
  367. enter: function (router) {
  368. App.router.get('updateController').set('isWorking', false);
  369. router.get('mainController').dataLoading().done(function () {
  370. App.ModalPopup.show({
  371. classNames: ['full-width-modal'],
  372. header: Em.I18n.t('admin.removeSecurity.header'),
  373. bodyClass: App.KerberosDisableView.extend({
  374. controllerBinding: 'App.router.kerberosDisableController'
  375. }),
  376. primary: Em.I18n.t('form.cancel'),
  377. secondary: null,
  378. showFooter: false,
  379. onClose: function () {
  380. var self = this;
  381. var controller = router.get('kerberosDisableController');
  382. if (!controller.get('isSubmitDisabled')) {
  383. self.proceedOnClose();
  384. return;
  385. }
  386. // warn user if disable kerberos command in progress
  387. var unkerberizeCommand = controller.get('tasks').findProperty('command', 'unkerberize');
  388. if (unkerberizeCommand && !unkerberizeCommand.get('isCompleted')) {
  389. // user cannot exit wizard during removing kerberos
  390. if (unkerberizeCommand.get('status') == 'IN_PROGRESS') {
  391. App.showAlertPopup(Em.I18n.t('admin.kerberos.disable.unkerberize.header'), Em.I18n.t('admin.kerberos.disable.unkerberize.message'));
  392. } else {
  393. // otherwise show confirmation window
  394. App.showConfirmationPopup(function () {
  395. self.proceedOnClose();
  396. }, Em.I18n.t('admin.security.disable.onClose'));
  397. }
  398. } else {
  399. self.proceedOnClose();
  400. }
  401. },
  402. proceedOnClose: function () {
  403. var self = this;
  404. var disableController = router.get('kerberosDisableController');
  405. disableController.clearStep();
  406. disableController.resetDbNamespace();
  407. App.db.setSecurityDeployCommands(undefined);
  408. App.router.get('updateController').set('isWorking', true);
  409. router.get('mainAdminKerberosController').setDisableSecurityStatus(undefined);
  410. router.get('addServiceController').finish();
  411. App.clusterStatus.setClusterStatus({
  412. clusterName: router.get('content.cluster.name'),
  413. clusterState: 'DEFAULT',
  414. localdb: App.db.data
  415. }, {
  416. alwaysCallback: function () {
  417. self.hide();
  418. router.transitionTo('adminKerberos.index');
  419. Em.run.next(function() {
  420. location.reload();
  421. });
  422. }
  423. });
  424. },
  425. didInsertElement: function () {
  426. this._super();
  427. this.fitHeight();
  428. }
  429. });
  430. });
  431. },
  432. unroutePath: function () {
  433. return false;
  434. },
  435. next: function (router, context) {
  436. $("#modal").find(".close").trigger('click');
  437. },
  438. done: function (router, context) {
  439. var controller = router.get('kerberosDisableController');
  440. if (!controller.get('isSubmitDisabled')) {
  441. $(context.currentTarget).parents("#modal").find(".close").trigger('click');
  442. }
  443. }
  444. })
  445. }),
  446. stackAndUpgrade: Em.Route.extend({
  447. route: '/stack',
  448. connectOutlets: function (router) {
  449. router.set('mainAdminController.category', "stackAndUpgrade");
  450. router.get('mainAdminController').connectOutlet('mainAdminStackAndUpgrade');
  451. },
  452. index: Em.Route.extend({
  453. route: '/',
  454. redirectsTo: 'services'
  455. }),
  456. services: Em.Route.extend({
  457. route: '/services',
  458. connectOutlets: function (router, context) {
  459. router.get('mainAdminStackAndUpgradeController').connectOutlet('mainAdminStackServices');
  460. }
  461. }),
  462. versions: Em.Route.extend({
  463. route: '/versions',
  464. connectOutlets: function (router, context) {
  465. router.get('mainAdminStackAndUpgradeController').connectOutlet('MainAdminStackVersions');
  466. }
  467. }),
  468. stackNavigate: function (router, event) {
  469. var parent = event.view._parentView;
  470. parent.deactivateChildViews();
  471. event.view.set('active', "active");
  472. router.transitionTo(event.context);
  473. }
  474. }),
  475. stackUpgrade: require('routes/stack_upgrade_routes'),
  476. adminAdvanced: Em.Route.extend({
  477. route: '/advanced',
  478. connectOutlets: function (router) {
  479. router.set('mainAdminController.category', "advanced");
  480. router.get('mainAdminController').connectOutlet('mainAdminAdvanced');
  481. }
  482. }),
  483. adminServiceAccounts: Em.Route.extend({
  484. route: '/serviceAccounts',
  485. enter: function (router, transition) {
  486. if (router.get('loggedIn') && !App.isAuthorized('SERVICE.SET_SERVICE_USERS_GROUPS')) {
  487. router.transitionTo('main.dashboard.index');
  488. }
  489. },
  490. connectOutlets: function (router) {
  491. router.set('mainAdminController.category', "adminServiceAccounts");
  492. router.get('mainAdminController').connectOutlet('mainAdminServiceAccounts');
  493. }
  494. }),
  495. adminServiceAutoStart: Em.Route.extend({
  496. route: '/serviceAutoStart',
  497. connectOutlets: function (router) {
  498. router.set('mainAdminController.category', "serviceAutoStart");
  499. router.get('mainAdminController').connectOutlet('mainAdminServiceAutoStart');
  500. },
  501. exitRoute: function (router, context, callback) {
  502. var controller = router.get('mainAdminServiceAutoStartController');
  503. if (!controller.get('isSaveDisabled')) {
  504. controller.showSavePopup(callback);
  505. } else {
  506. callback();
  507. }
  508. }
  509. }),
  510. adminAudit: Em.Route.extend({
  511. route: '/audit',
  512. connectOutlets: function (router) {
  513. router.set('mainAdminController.category', "audit");
  514. router.get('mainAdminController').connectOutlet('mainAdminAudit');
  515. }
  516. }),
  517. upgradeStack: function (router, event) {
  518. if (!$(event.currentTarget).hasClass('inactive')) {
  519. router.transitionTo('stackUpgrade');
  520. }
  521. },
  522. adminNavigate: function (router, object) {
  523. router.transitionTo('admin' + object.context.capitalize());
  524. },
  525. //events
  526. goToAdmin: function (router, event) {
  527. var isDisabled = !!event.context.disabled;
  528. if(!isDisabled){
  529. router.transitionTo(event.context.url);
  530. }
  531. }
  532. }),
  533. createServiceWidget: function (router, context) {
  534. if (context) {
  535. var widgetController = router.get('widgetWizardController');
  536. widgetController.save('widgetService', context.get('serviceName'));
  537. var layout = JSON.parse(JSON.stringify(context.get('layout')));
  538. layout.widgets = context.get('layout.widgets').mapProperty('id');
  539. widgetController.save('layout', layout);
  540. }
  541. router.transitionTo('createWidget');
  542. },
  543. createWidget: require('routes/create_widget'),
  544. editServiceWidget: function (router, context) {
  545. if (context) {
  546. var widgetController = router.get('widgetEditController');
  547. widgetController.save('widgetService', context.get('serviceName'));
  548. widgetController.save('widgetType', context.get('widgetType'));
  549. widgetController.save('widgetProperties', context.get('properties'));
  550. widgetController.save('widgetMetrics', context.get('metrics'));
  551. widgetController.save('widgetValues', context.get('values'));
  552. widgetController.save('widgetName', context.get('widgetName'));
  553. widgetController.save('widgetDescription', context.get('description'));
  554. widgetController.save('widgetScope', context.get('scope'));
  555. widgetController.save('widgetAuthor', context.get('author'));
  556. widgetController.save('widgetId', context.get('id'));
  557. widgetController.save('allMetrics', []);
  558. }
  559. router.transitionTo('editWidget');
  560. },
  561. editWidget: require('routes/edit_widget'),
  562. services: Em.Route.extend({
  563. route: '/services',
  564. index: Em.Route.extend({
  565. route: '/',
  566. enter: function (router) {
  567. Em.run.next(function () {
  568. var controller = router.get('mainController');
  569. controller.dataLoading().done(function () {
  570. if (router.currentState.parentState.name === 'services' && router.currentState.name === 'index') {
  571. var service = router.get('mainServiceItemController.content');
  572. if (!service || !service.get('isLoaded')) {
  573. service = App.Service.find().objectAt(0); // getting the first service to display
  574. }
  575. if (router.get('mainServiceItemController').get('routeToConfigs')) {
  576. router.transitionTo('service.configs', service);
  577. } else if (router.get('mainServiceItemController.routeToHeatmaps')) {
  578. router.transitionTo('service.heatmaps', service);
  579. } else {
  580. router.transitionTo('service.summary', service);
  581. }
  582. }
  583. });
  584. });
  585. }
  586. }),
  587. connectOutlets: function (router, context) {
  588. router.get('mainController').connectOutlet('mainService');
  589. },
  590. service: Em.Route.extend({
  591. route: '/:service_id',
  592. connectOutlets: function (router, service) {
  593. router.get('mainServiceController').connectOutlet('mainServiceItem', service);
  594. if (service.get('isLoaded')) {
  595. if (router.get('mainServiceItemController').get('routeToConfigs')) {
  596. router.transitionTo('configs');
  597. } else if (router.get('mainServiceItemController.routeToHeatmaps')) {
  598. router.transitionTo('heatmaps');
  599. } else {
  600. router.transitionTo('summary');
  601. }
  602. } else {
  603. router.transitionTo('index');
  604. }
  605. },
  606. index: Ember.Route.extend({
  607. route: '/'
  608. }),
  609. summary: Em.Route.extend({
  610. route: '/summary',
  611. connectOutlets: function (router, context) {
  612. App.loadTimer.start('Service Summary Page');
  613. var item = router.get('mainServiceItemController.content');
  614. if (router.get('clusterController.isServiceMetricsLoaded')) router.get('updateController').updateServiceMetric(Em.K);
  615. //if service is not existed then route to default service
  616. if (item.get('isLoaded')) {
  617. router.get('mainServiceItemController').connectOutlet('mainServiceInfoSummary', item);
  618. } else {
  619. router.transitionTo('services.index');
  620. }
  621. }
  622. }),
  623. metrics: Em.Route.extend({
  624. route: '/metrics',
  625. connectOutlets: function (router, context) {
  626. var item = router.get('mainServiceItemController.content');
  627. router.get('mainServiceItemController').connectOutlet('mainServiceInfoMetrics', item);
  628. }
  629. }),
  630. configs: Em.Route.extend({
  631. route: '/configs',
  632. connectOutlets: function (router, context) {
  633. App.loadTimer.start('Service Configs Page');
  634. router.get('mainController').dataLoading().done(function () {
  635. var item = router.get('mainServiceItemController.content');
  636. //if service is not existed then route to default service
  637. if (item.get('isLoaded')) {
  638. if (router.get('mainServiceItemController.isConfigurable')) {
  639. router.get('mainServiceItemController').connectOutlet('mainServiceInfoConfigs', item);
  640. }
  641. else {
  642. // if service doesn't have configs redirect to summary
  643. router.transitionTo('summary');
  644. }
  645. } else {
  646. item.set('routeToConfigs', true);
  647. router.transitionTo('services.index');
  648. }
  649. });
  650. },
  651. exitRoute: function (router, context, callback) {
  652. var controller = router.get('mainServiceInfoConfigsController');
  653. // If another user is running some wizard, current user can't save configs
  654. if (controller.hasUnsavedChanges() && !router.get('wizardWatcherController.isWizardRunning')) {
  655. controller.showSavePopup(callback);
  656. } else {
  657. callback();
  658. }
  659. }
  660. }),
  661. heatmaps: Em.Route.extend({
  662. route: '/heatmaps',
  663. connectOutlets: function (router, context) {
  664. App.loadTimer.start('Service Heatmaps Page');
  665. router.get('mainController').dataLoading().done(function () {
  666. var item = router.get('mainServiceItemController.content');
  667. if (item.get('isLoaded')) {
  668. router.get('mainServiceItemController').connectOutlet('mainServiceInfoHeatmap', item);
  669. } else {
  670. item.set('routeToHeatmaps', true);
  671. router.transitionTo('services.index');
  672. }
  673. });
  674. }
  675. }),
  676. audit: Em.Route.extend({
  677. route: '/audit',
  678. connectOutlets: function (router, context) {
  679. var item = router.get('mainServiceItemController.content');
  680. router.get('mainServiceItemController').connectOutlet('mainServiceInfoAudit', item);
  681. }
  682. }),
  683. showInfo: function (router, event) {
  684. router.transitionTo(event.context);
  685. }
  686. }),
  687. showService: Em.Router.transitionTo('service'),
  688. addService: Em.Router.transitionTo('serviceAdd'),
  689. reassign: Em.Router.transitionTo('reassign'),
  690. enableHighAvailability: require('routes/high_availability_routes'),
  691. enableRMHighAvailability: require('routes/rm_high_availability_routes'),
  692. enableRAHighAvailability: require('routes/ra_high_availability_routes'),
  693. addHawqStandby: require('routes/add_hawq_standby_routes'),
  694. removeHawqStandby: require('routes/remove_hawq_standby_routes'),
  695. activateHawqStandby: require('routes/activate_hawq_standby_routes'),
  696. rollbackHighAvailability: require('routes/rollbackHA_routes')
  697. }),
  698. reassign: require('routes/reassign_master_routes'),
  699. serviceAdd: require('routes/add_service_routes'),
  700. selectService: Em.Route.transitionTo('services.service.summary'),
  701. selectHost: function (router, event) {
  702. router.get('mainHostDetailsController').set('isFromHosts', false);
  703. router.transitionTo('hosts.hostDetails.index', event.context);
  704. },
  705. filterHosts: function (router, component) {
  706. if (!component.context)
  707. return;
  708. router.get('mainHostController').filterByComponent(component.context);
  709. router.get('mainHostController').set('showFilterConditionsFirstLoad', true);
  710. router.get('mainHostController').set('filterChangeHappened', true);
  711. router.transitionTo('hosts.index');
  712. },
  713. showDetails: function (router, event) {
  714. router.get('mainHostDetailsController').set('referer', router.location.lastSetURL);
  715. router.get('mainHostDetailsController').set('isFromHosts', true);
  716. router.transitionTo('hosts.hostDetails.summary', event.context);
  717. },
  718. gotoAlertDetails: function (router, event) {
  719. router.transitionTo('alerts.alertDetails', event.context);
  720. },
  721. /**
  722. * Open summary page of the selected service
  723. * @param {object} event
  724. * @method routeToService
  725. */
  726. routeToService: function (router, event) {
  727. var service = event.context;
  728. router.transitionTo('main.services.service.summary', service);
  729. }
  730. });