diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/components/breadcrumb-bar.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/components/breadcrumb-bar.js index 44edb8e..c89c813 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/components/breadcrumb-bar.js +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/components/breadcrumb-bar.js @@ -21,11 +21,16 @@ import Ember from 'ember'; export default Ember.Component.extend({ breadcrumbs: null, - - actions:{ - refresh: function () { + autorefreshable: false, + autorefreshIntervals: [0, 5, 10, 30, 60, 120], + interval: 0, + actions: { + refresh: function() { this.get("targetObject").send("refresh"); + }, + selectAutorefreshInterval(autorefreshInterval) { + this.get("targetObject").set('interval', autorefreshInterval); + this.get("targetObject").send('refresh'); } - } - + }, }); diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/controllers/cluster-overview.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/controllers/cluster-overview.js index 22e6267..2173626 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/controllers/cluster-overview.js +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/controllers/cluster-overview.js @@ -21,6 +21,9 @@ import Ember from 'ember'; export default Ember.Controller.extend({ loading: true, + queryParams: ['interval'], + interval: 0, + breadcrumbs: [{ text: "Home", routeName: 'application' @@ -28,5 +31,4 @@ export default Ember.Controller.extend({ text: "Cluster Overview", routeName: 'cluster-overview', }] - -}); \ No newline at end of file +}); diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/controllers/yarn-apps.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/controllers/yarn-apps.js index 18bf682..34eefa7 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/controllers/yarn-apps.js +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/controllers/yarn-apps.js @@ -20,6 +20,9 @@ import Ember from 'ember'; export default Ember.Controller.extend({ + queryParams: ['interval'], + interval: 0, + breadcrumbs: [{ text: "Home", routeName: 'application' diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/helpers/autorefresh.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/helpers/autorefresh.js new file mode 100644 index 0000000..7c3d4e8 --- /dev/null +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/helpers/autorefresh.js @@ -0,0 +1,30 @@ +/** + * 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. + */ +import Ember from 'ember'; + +export function autorefresh(interval) { + if (interval == 0) + return 'disabled'; + if (interval < 60) + return 'every ' + interval + ' seconds'; + if (interval == 60) + return 'every minute'; + return 'every ' + interval / 60 + ' minutes'; +} + +export default Ember.Helper.helper(autorefresh); diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/routes/abstract.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/routes/abstract.js index 3163237..cb2b503 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/routes/abstract.js +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/routes/abstract.js @@ -27,6 +27,29 @@ export default Ember.Route.extend({ refresh: function () { this.unloadAll(); this.refresh(); + }, + loading(transition, originRoute) { + if (this.controller) { + return this.controller.get('interval') == 0; + } + return true; + } + }, + + setupController: function(controller, model){ + this._super(controller, model); + if (controller.get('interval')) { + var self = this; + Ember.run.later(function() { + self.unloadAll(); + self.refresh(); + }, controller.get('interval') * 1000); + } + }, + + resetController(controller, isExiting, transition) { + if (isExiting) { + controller.set('interval', 0); } } -}); \ No newline at end of file +}); diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/routes/yarn-apps.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/routes/yarn-apps.js index 56349aa..e791866 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/routes/yarn-apps.js +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/routes/yarn-apps.js @@ -29,5 +29,6 @@ export default AbstractRoute.extend({ unloadAll() { this.store.unloadAll('ClusterMetric'); + this.store.unloadAll('yarn-app'); } }); diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/routes/yarn-apps/apps.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/routes/yarn-apps/apps.js index b0f3745..21a2937 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/routes/yarn-apps/apps.js +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/routes/yarn-apps/apps.js @@ -23,9 +23,5 @@ export default Ember.Route.extend({ return Ember.RSVP.hash({ apps: this.store.findAll('yarn-app', {reload: true}), }); - }, - - unloadAll() { - this.store.unloadAll('yarn-app'); } }); diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/routes/yarn-apps/services.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/routes/yarn-apps/services.js index 34ad1ad..86bd2d2 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/routes/yarn-apps/services.js +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/routes/yarn-apps/services.js @@ -25,9 +25,5 @@ export default Ember.Route.extend({ applicationTypes: "org-apache-slider" }), }); - }, - - unloadAll() { - this.store.unloadAll('yarn-app'); } }); diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/styles/app.css b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/styles/app.css index 7ac21bc..2a30cd9 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/styles/app.css +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/styles/app.css @@ -282,6 +282,12 @@ li a.navigation-link.ember-view { top: 3px; } +.breadcrumb-bar select { + position: absolute; + right: 90px; + top: 1px; +} + .x-scroll { overflow-x: scroll; } diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/templates/cluster-overview.hbs b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/templates/cluster-overview.hbs index ac8f20a..4d07918 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/templates/cluster-overview.hbs +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/templates/cluster-overview.hbs @@ -16,7 +16,7 @@ * limitations under the License. }} -{{breadcrumb-bar breadcrumbs=breadcrumbs}} +{{breadcrumb-bar breadcrumbs=breadcrumbs autorefreshable=true interval=interval}} {{#if model}} diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/templates/components/breadcrumb-bar.hbs b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/templates/components/breadcrumb-bar.hbs index 24acbd9..cec1949 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/templates/components/breadcrumb-bar.hbs +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/templates/components/breadcrumb-bar.hbs @@ -16,7 +16,14 @@ * limitations under the License. }} -
- \ No newline at end of file + diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/tests/unit/helpers/autorefresh-test.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/tests/unit/helpers/autorefresh-test.js new file mode 100644 index 0000000..e73a796 --- /dev/null +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/tests/unit/helpers/autorefresh-test.js @@ -0,0 +1,10 @@ +import { autorefresh } from '../../../helpers/autorefresh'; +import { module, test } from 'qunit'; + +module('Unit | Helper | autorefresh'); + +// Replace this with your real tests. +test('it works', function(assert) { + let result = autorefresh(42); + assert.ok(result); +});