main.js 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784
  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'
  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. hosts: Em.Route.extend({
  182. route: '/hosts',
  183. index: Ember.Route.extend({
  184. route: '/',
  185. connectOutlets: function (router, context) {
  186. App.loadTimer.start('Hosts Page');
  187. router.get('mainController').connectOutlet('mainHost');
  188. router.get('mainHostController').connectOutlet('mainHostComboSearchBox');
  189. }
  190. }),
  191. hostDetails: Em.Route.extend({
  192. route: '/:host_id',
  193. connectOutlets: function (router, host) {
  194. router.get('mainHostController').set('showFilterConditionsFirstLoad', true);
  195. router.get('mainController').connectOutlet('mainHostDetails', host);
  196. },
  197. index: Ember.Route.extend({
  198. route: '/',
  199. redirectsTo: 'summary'
  200. }),
  201. summary: Em.Route.extend({
  202. route: '/summary',
  203. connectOutlets: function (router, context) {
  204. router.get('mainController').dataLoading().done(function() {
  205. var controller = router.get('mainHostDetailsController');
  206. if ( App.Service.find().mapProperty('serviceName').contains('OOZIE')) {
  207. controller.loadConfigs('loadOozieConfigs');
  208. controller.isOozieConfigLoaded.always(function () {
  209. controller.connectOutlet('mainHostSummary');
  210. });
  211. } else {
  212. controller.connectOutlet('mainHostSummary');
  213. }
  214. });
  215. }
  216. }),
  217. configs: Em.Route.extend({
  218. route: '/configs',
  219. connectOutlets: function (router, context) {
  220. router.get('mainController').isLoading.call(router.get('clusterController'), 'isConfigsPropertiesLoaded').done(function () {
  221. router.get('mainHostDetailsController').connectOutlet('mainHostConfigs');
  222. });
  223. }
  224. }),
  225. alerts: Em.Route.extend({
  226. route: '/alerts',
  227. connectOutlets: function (router, context) {
  228. router.get('mainHostDetailsController').connectOutlet('mainHostAlerts');
  229. },
  230. exit: function (router) {
  231. router.set('mainAlertInstancesController.isUpdating', false);
  232. }
  233. }),
  234. metrics: Em.Route.extend({
  235. route: '/metrics',
  236. connectOutlets: function (router, context) {
  237. router.get('mainHostDetailsController').connectOutlet('mainHostMetrics');
  238. }
  239. }),
  240. stackVersions: Em.Route.extend({
  241. route: '/stackVersions',
  242. connectOutlets: function (router, context) {
  243. if (App.get('stackVersionsAvailable')) {
  244. router.get('mainHostDetailsController').connectOutlet('mainHostStackVersions');
  245. }
  246. else {
  247. router.transitionTo('summary');
  248. }
  249. }
  250. }),
  251. logs: Em.Route.extend({
  252. route: '/logs:query',
  253. connectOutlets: function (router, context) {
  254. if (App.get('supports.logSearch')) {
  255. router.get('mainHostDetailsController').connectOutlet('mainHostLogs')
  256. } else {
  257. router.transitionTo('summary');
  258. }
  259. },
  260. serialize: function(router, params) {
  261. return this.serializeQueryParams(router, params, 'mainHostDetailsController');
  262. }
  263. }),
  264. hostNavigate: function (router, event) {
  265. var parent = event.view._parentView;
  266. parent.deactivateChildViews();
  267. event.view.set('active', "active");
  268. router.transitionTo(event.context);
  269. }
  270. }),
  271. back: function (router, event) {
  272. var referer = router.get('mainHostDetailsController.referer');
  273. if (referer) {
  274. router.route(referer);
  275. }
  276. else {
  277. window.history.back();
  278. }
  279. },
  280. addHost: function (router) {
  281. router.transitionTo('hostAdd');
  282. }
  283. }),
  284. hostAdd: require('routes/add_host_routes'),
  285. alerts: Em.Route.extend({
  286. route: '/alerts',
  287. index: Em.Route.extend({
  288. route: '/',
  289. connectOutlets: function (router, context) {
  290. router.get('mainController').connectOutlet('mainAlertDefinitions');
  291. }
  292. }),
  293. alertDetails: Em.Route.extend({
  294. route: '/:alert_definition_id',
  295. connectOutlets: function (router, alertDefinition) {
  296. App.router.set('mainAlertDefinitionsController.showFilterConditionsFirstLoad', true);
  297. router.get('mainController').connectOutlet('mainAlertDefinitionDetails', alertDefinition);
  298. },
  299. exit: function (router) {
  300. router.set('mainAlertInstancesController.isUpdating', false);
  301. },
  302. exitRoute: function (router, context, callback) {
  303. var controller = router.get('mainAlertDefinitionDetailsController');
  304. if (controller.get('isEditing')) {
  305. controller.showSavePopup(callback);
  306. } else {
  307. callback();
  308. }
  309. }
  310. }),
  311. back: function (router, event) {
  312. window.history.back();
  313. }
  314. }),
  315. alertAdd: require('routes/add_alert_definition_routes'),
  316. admin: Em.Route.extend({
  317. route: '/admin',
  318. enter: function (router, transition) {
  319. if (router.get('loggedIn') && !App.isAuthorized('CLUSTER.TOGGLE_KERBEROS, AMBARI.SET_SERVICE_USERS_GROUPS, CLUSTER.UPGRADE_DOWNGRADE_STACK, CLUSTER.VIEW_STACK_DETAILS')) {
  320. Em.run.next(function () {
  321. router.transitionTo('main.dashboard.index');
  322. });
  323. }
  324. },
  325. routePath: function (router, event) {
  326. if (!App.isAuthorized('CLUSTER.UPGRADE_DOWNGRADE_STACK')) {
  327. Em.run.next(function () {
  328. App.router.transitionTo('main.dashboard.index');
  329. });
  330. } else {
  331. this._super(router, event);
  332. }
  333. },
  334. connectOutlets: function (router, context) {
  335. router.get('mainController').connectOutlet('mainAdmin');
  336. },
  337. index: Em.Route.extend({
  338. route: '/',
  339. redirectsTo: 'stackAndUpgrade.index'
  340. }),
  341. adminAuthentication: Em.Route.extend({
  342. route: '/authentication',
  343. connectOutlets: function (router, context) {
  344. router.set('mainAdminController.category', "authentication");
  345. router.get('mainAdminController').connectOutlet('mainAdminAuthentication');
  346. }
  347. }),
  348. adminKerberos: Em.Route.extend({
  349. route: '/kerberos',
  350. index: Em.Route.extend({
  351. route: '/',
  352. connectOutlets: function (router, context) {
  353. router.set('mainAdminController.category', "kerberos");
  354. router.get('mainAdminController').connectOutlet('mainAdminKerberos');
  355. }
  356. }),
  357. adminAddKerberos: require('routes/add_kerberos_routes'),
  358. disableSecurity: Em.Route.extend({
  359. route: '/disableSecurity',
  360. enter: function (router) {
  361. App.router.get('updateController').set('isWorking', false);
  362. router.get('mainController').dataLoading().done(function () {
  363. App.ModalPopup.show({
  364. classNames: ['full-width-modal'],
  365. header: Em.I18n.t('admin.removeSecurity.header'),
  366. bodyClass: App.KerberosDisableView.extend({
  367. controllerBinding: 'App.router.kerberosDisableController'
  368. }),
  369. primary: Em.I18n.t('form.cancel'),
  370. secondary: null,
  371. showFooter: false,
  372. onClose: function () {
  373. var self = this;
  374. var controller = router.get('kerberosDisableController');
  375. if (!controller.get('isSubmitDisabled')) {
  376. self.proceedOnClose();
  377. return;
  378. }
  379. // warn user if disable kerberos command in progress
  380. var unkerberizeCommand = controller.get('tasks').findProperty('command', 'unkerberize');
  381. if (unkerberizeCommand && !unkerberizeCommand.get('isCompleted')) {
  382. // user cannot exit wizard during removing kerberos
  383. if (unkerberizeCommand.get('status') == 'IN_PROGRESS') {
  384. App.showAlertPopup(Em.I18n.t('admin.kerberos.disable.unkerberize.header'), Em.I18n.t('admin.kerberos.disable.unkerberize.message'));
  385. } else {
  386. // otherwise show confirmation window
  387. App.showConfirmationPopup(function () {
  388. self.proceedOnClose();
  389. }, Em.I18n.t('admin.security.disable.onClose'));
  390. }
  391. } else {
  392. self.proceedOnClose();
  393. }
  394. },
  395. proceedOnClose: function () {
  396. var self = this;
  397. var disableController = router.get('kerberosDisableController');
  398. disableController.clearStep();
  399. disableController.resetDbNamespace();
  400. App.db.setSecurityDeployCommands(undefined);
  401. App.router.get('updateController').set('isWorking', true);
  402. router.get('mainAdminKerberosController').setDisableSecurityStatus(undefined);
  403. router.get('addServiceController').finish();
  404. App.clusterStatus.setClusterStatus({
  405. clusterName: router.get('content.cluster.name'),
  406. clusterState: 'DEFAULT',
  407. localdb: App.db.data
  408. }, {
  409. alwaysCallback: function () {
  410. self.hide();
  411. router.transitionTo('adminKerberos.index');
  412. Em.run.next(function() {
  413. location.reload();
  414. });
  415. }
  416. });
  417. },
  418. didInsertElement: function () {
  419. this.fitHeight();
  420. }
  421. });
  422. });
  423. },
  424. unroutePath: function () {
  425. return false;
  426. },
  427. next: function (router, context) {
  428. $("#modal").find(".close").trigger('click');
  429. },
  430. done: function (router, context) {
  431. var controller = router.get('kerberosDisableController');
  432. if (!controller.get('isSubmitDisabled')) {
  433. $(context.currentTarget).parents("#modal").find(".close").trigger('click');
  434. }
  435. }
  436. })
  437. }),
  438. stackAndUpgrade: Em.Route.extend({
  439. route: '/stack',
  440. connectOutlets: function (router) {
  441. router.set('mainAdminController.category', "stackAndUpgrade");
  442. router.get('mainAdminController').connectOutlet('mainAdminStackAndUpgrade');
  443. },
  444. index: Em.Route.extend({
  445. route: '/',
  446. redirectsTo: 'services'
  447. }),
  448. services: Em.Route.extend({
  449. route: '/services',
  450. connectOutlets: function (router, context) {
  451. router.get('mainAdminStackAndUpgradeController').connectOutlet('mainAdminStackServices');
  452. }
  453. }),
  454. versions: Em.Route.extend({
  455. route: '/versions',
  456. connectOutlets: function (router, context) {
  457. router.get('mainAdminStackAndUpgradeController').connectOutlet('MainAdminStackVersions');
  458. }
  459. }),
  460. stackNavigate: function (router, event) {
  461. var parent = event.view._parentView;
  462. parent.deactivateChildViews();
  463. event.view.set('active', "active");
  464. router.transitionTo(event.context);
  465. }
  466. }),
  467. stackUpgrade: require('routes/stack_upgrade_routes'),
  468. adminAdvanced: Em.Route.extend({
  469. route: '/advanced',
  470. connectOutlets: function (router) {
  471. router.set('mainAdminController.category', "advanced");
  472. router.get('mainAdminController').connectOutlet('mainAdminAdvanced');
  473. }
  474. }),
  475. adminServiceAccounts: Em.Route.extend({
  476. route: '/serviceAccounts',
  477. connectOutlets: function (router) {
  478. router.set('mainAdminController.category', "adminServiceAccounts");
  479. router.get('mainAdminController').connectOutlet('mainAdminServiceAccounts');
  480. }
  481. }),
  482. adminServiceAutoStart: Em.Route.extend({
  483. route: '/serviceAutoStart',
  484. connectOutlets: function (router) {
  485. router.set('mainAdminController.category', "serviceAutoStart");
  486. router.get('mainAdminController').connectOutlet('mainAdminServiceAutoStart');
  487. },
  488. exitRoute: function (router, context, callback) {
  489. var controller = router.get('mainAdminServiceAutoStartController');
  490. if (!controller.get('isSaveDisabled')) {
  491. controller.showSavePopup(callback);
  492. } else {
  493. callback();
  494. }
  495. }
  496. }),
  497. adminAudit: Em.Route.extend({
  498. route: '/audit',
  499. connectOutlets: function (router) {
  500. router.set('mainAdminController.category', "audit");
  501. router.get('mainAdminController').connectOutlet('mainAdminAudit');
  502. }
  503. }),
  504. upgradeStack: function (router, event) {
  505. if (!$(event.currentTarget).hasClass('inactive')) {
  506. router.transitionTo('stackUpgrade');
  507. }
  508. },
  509. adminNavigate: function (router, object) {
  510. router.transitionTo('admin' + object.context.capitalize());
  511. },
  512. //events
  513. goToAdmin: function (router, event) {
  514. router.transitionTo(event.context);
  515. }
  516. }),
  517. createServiceWidget: function (router, context) {
  518. if (context) {
  519. var widgetController = router.get('widgetWizardController');
  520. widgetController.save('widgetService', context.get('serviceName'));
  521. var layout = JSON.parse(JSON.stringify(context.get('layout')));
  522. layout.widgets = context.get('layout.widgets').mapProperty('id');
  523. widgetController.save('layout', layout);
  524. }
  525. router.transitionTo('createWidget');
  526. },
  527. createWidget: require('routes/create_widget'),
  528. editServiceWidget: function (router, context) {
  529. if (context) {
  530. var widgetController = router.get('widgetEditController');
  531. widgetController.save('widgetService', context.get('serviceName'));
  532. widgetController.save('widgetType', context.get('widgetType'));
  533. widgetController.save('widgetProperties', context.get('properties'));
  534. widgetController.save('widgetMetrics', context.get('metrics'));
  535. widgetController.save('widgetValues', context.get('values'));
  536. widgetController.save('widgetName', context.get('widgetName'));
  537. widgetController.save('widgetDescription', context.get('description'));
  538. widgetController.save('widgetScope', context.get('scope'));
  539. widgetController.save('widgetAuthor', context.get('author'));
  540. widgetController.save('widgetId', context.get('id'));
  541. widgetController.save('allMetrics', []);
  542. }
  543. router.transitionTo('editWidget');
  544. },
  545. editWidget: require('routes/edit_widget'),
  546. services: Em.Route.extend({
  547. route: '/services',
  548. index: Em.Route.extend({
  549. route: '/',
  550. enter: function (router) {
  551. Em.run.next(function () {
  552. var controller = router.get('mainController');
  553. controller.dataLoading().done(function () {
  554. if (router.currentState.parentState.name === 'services' && router.currentState.name === 'index') {
  555. var service = router.get('mainServiceItemController.content');
  556. if (!service || !service.get('isLoaded')) {
  557. service = App.Service.find().objectAt(0); // getting the first service to display
  558. }
  559. if (router.get('mainServiceItemController').get('routeToConfigs')) {
  560. router.transitionTo('service.configs', service);
  561. } else if (router.get('mainServiceItemController.routeToHeatmaps')) {
  562. router.transitionTo('service.heatmaps', service);
  563. } else {
  564. router.transitionTo('service.summary', service);
  565. }
  566. }
  567. });
  568. });
  569. }
  570. }),
  571. connectOutlets: function (router, context) {
  572. router.get('mainController').connectOutlet('mainService');
  573. },
  574. service: Em.Route.extend({
  575. route: '/:service_id',
  576. connectOutlets: function (router, service) {
  577. router.get('mainServiceController').connectOutlet('mainServiceItem', service);
  578. if (service.get('isLoaded')) {
  579. if (router.get('mainServiceItemController').get('routeToConfigs')) {
  580. router.transitionTo('configs');
  581. } else if (router.get('mainServiceItemController.routeToHeatmaps')) {
  582. router.transitionTo('heatmaps');
  583. } else {
  584. router.transitionTo('summary');
  585. }
  586. } else {
  587. router.transitionTo('index');
  588. }
  589. },
  590. index: Ember.Route.extend({
  591. route: '/'
  592. }),
  593. summary: Em.Route.extend({
  594. route: '/summary',
  595. connectOutlets: function (router, context) {
  596. App.loadTimer.start('Service Summary Page');
  597. var item = router.get('mainServiceItemController.content');
  598. if (router.get('clusterController.isServiceMetricsLoaded')) router.get('updateController').updateServiceMetric(Em.K);
  599. //if service is not existed then route to default service
  600. if (item.get('isLoaded')) {
  601. router.get('mainServiceItemController').connectOutlet('mainServiceInfoSummary', item);
  602. } else {
  603. router.transitionTo('services.index');
  604. }
  605. }
  606. }),
  607. metrics: Em.Route.extend({
  608. route: '/metrics',
  609. connectOutlets: function (router, context) {
  610. var item = router.get('mainServiceItemController.content');
  611. router.get('mainServiceItemController').connectOutlet('mainServiceInfoMetrics', item);
  612. }
  613. }),
  614. configs: Em.Route.extend({
  615. route: '/configs',
  616. connectOutlets: function (router, context) {
  617. App.loadTimer.start('Service Configs Page');
  618. router.get('mainController').dataLoading().done(function () {
  619. var item = router.get('mainServiceItemController.content');
  620. //if service is not existed then route to default service
  621. if (item.get('isLoaded')) {
  622. if (router.get('mainServiceItemController.isConfigurable')) {
  623. router.get('mainServiceItemController').connectOutlet('mainServiceInfoConfigs', item);
  624. }
  625. else {
  626. // if service doesn't have configs redirect to summary
  627. router.transitionTo('summary');
  628. }
  629. } else {
  630. item.set('routeToConfigs', true);
  631. router.transitionTo('services.index');
  632. }
  633. });
  634. },
  635. exitRoute: function (router, context, callback) {
  636. var controller = router.get('mainServiceInfoConfigsController');
  637. if (controller.hasUnsavedChanges()) {
  638. controller.showSavePopup(callback);
  639. } else {
  640. callback();
  641. }
  642. }
  643. }),
  644. heatmaps: Em.Route.extend({
  645. route: '/heatmaps',
  646. connectOutlets: function (router, context) {
  647. App.loadTimer.start('Service Heatmaps Page');
  648. router.get('mainController').dataLoading().done(function () {
  649. var item = router.get('mainServiceItemController.content');
  650. if (item.get('isLoaded')) {
  651. router.get('mainServiceItemController').connectOutlet('mainServiceInfoHeatmap', item);
  652. } else {
  653. item.set('routeToHeatmaps', true);
  654. router.transitionTo('services.index');
  655. }
  656. });
  657. }
  658. }),
  659. audit: Em.Route.extend({
  660. route: '/audit',
  661. connectOutlets: function (router, context) {
  662. var item = router.get('mainServiceItemController.content');
  663. router.get('mainServiceItemController').connectOutlet('mainServiceInfoAudit', item);
  664. }
  665. }),
  666. showInfo: function (router, event) {
  667. var mainServiceInfoConfigsController = App.router.get('mainServiceInfoConfigsController');
  668. if (event.context !== 'configs' && mainServiceInfoConfigsController.hasUnsavedChanges()) {
  669. mainServiceInfoConfigsController.showSavePopup(router.get('location.lastSetURL').replace('configs', 'summary'));
  670. return false;
  671. }
  672. var parent = event.view.get('_parentView');
  673. parent.deactivateChildViews();
  674. event.view.set('active', "active");
  675. router.transitionTo(event.context);
  676. }
  677. }),
  678. showService: Em.Router.transitionTo('service'),
  679. addService: Em.Router.transitionTo('serviceAdd'),
  680. reassign: Em.Router.transitionTo('reassign'),
  681. enableHighAvailability: require('routes/high_availability_routes'),
  682. enableRMHighAvailability: require('routes/rm_high_availability_routes'),
  683. enableRAHighAvailability: require('routes/ra_high_availability_routes'),
  684. addHawqStandby: require('routes/add_hawq_standby_routes'),
  685. activateHawqStandby: require('routes/activate_hawq_standby_routes'),
  686. rollbackHighAvailability: require('routes/rollbackHA_routes')
  687. }),
  688. reassign: require('routes/reassign_master_routes'),
  689. serviceAdd: require('routes/add_service_routes'),
  690. selectService: Em.Route.transitionTo('services.service.summary'),
  691. selectHost: function (router, event) {
  692. router.get('mainHostDetailsController').set('isFromHosts', false);
  693. router.transitionTo('hosts.hostDetails.index', event.context);
  694. },
  695. filterHosts: function (router, component) {
  696. if (!component.context)
  697. return;
  698. router.get('mainHostController').filterByComponent(component.context);
  699. router.get('mainHostController').set('showFilterConditionsFirstLoad', true);
  700. router.get('mainHostController').set('filterChangeHappened', true);
  701. router.transitionTo('hosts.index');
  702. },
  703. showDetails: function (router, event) {
  704. router.get('mainHostDetailsController').set('referer', router.location.lastSetURL);
  705. router.get('mainHostDetailsController').set('isFromHosts', true);
  706. router.transitionTo('hosts.hostDetails.summary', event.context);
  707. },
  708. gotoAlertDetails: function (router, event) {
  709. router.transitionTo('alerts.alertDetails', event.context);
  710. },
  711. /**
  712. * Open summary page of the selected service
  713. * @param {object} event
  714. * @method routeToService
  715. */
  716. routeToService: function (router, event) {
  717. var service = event.context;
  718. router.transitionTo('main.services.service.summary', service);
  719. }
  720. });