YARN-7392. Render cluster information on new YARN web ui. Contributed by Vasudevan Skm.

This commit is contained in:
Sunil G 2017-11-03 11:45:50 +05:30
parent b00f828d84
commit c41728486b
10 changed files with 222 additions and 6 deletions

View File

@ -0,0 +1,29 @@
/**
* 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';
import Converter from 'yarn-ui/utils/converter';
export function dateFormatter(params) {
const [timestamp, dateOnly] = params;
return dateOnly ? Converter.timeStampToDateOnly(timestamp) : Converter.timeStampToDate(timestamp);
}
export default Ember.Helper.helper(dateFormatter);

View File

@ -0,0 +1,27 @@
/**
* 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 lower(params) {
const string = params[0];
return string.toLowerCase();
}
export default Ember.Helper.helper(lower);

View File

@ -0,0 +1,35 @@
/**
* 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 initialize(/* application */) {
Ember.$(document).tooltip({
tooltipClass: 'generic-tooltip',
selector: ".yarn-tooltip"
});
Ember.$.ajaxSetup({
cache: false
});
}
export default {
name: 'jquery',
initialize
};

View File

@ -27,5 +27,8 @@ export default DS.Model.extend({
resourceManagerBuildVersion: DS.attr('string'), resourceManagerBuildVersion: DS.attr('string'),
hadoopVersion: DS.attr('string'), hadoopVersion: DS.attr('string'),
hadoopBuildVersion: DS.attr('string'), hadoopBuildVersion: DS.attr('string'),
hadoopVersionBuiltOn: DS.attr('string') hadoopVersionBuiltOn: DS.attr('string'),
}); getYARNBuildHash: function() {
return this.get("hadoopVersion") + " from " + this.get("resourceManagerBuildVersion").split(" ")[2];
}.property("yarnHash")
});

View File

@ -17,8 +17,13 @@
*/ */
import Ember from 'ember'; import Ember from 'ember';
import AbstractRoute from './abstract';
export default AbstractRoute.extend({
model() {
return this.store.findAll('ClusterInfo', {reload: true});
},
export default Ember.Route.extend({
actions: { actions: {
/** /**
* Base error handler for the application. * Base error handler for the application.
@ -35,5 +40,9 @@ export default Ember.Route.extend({
this.intermediateTransitionTo('/error'); this.intermediateTransitionTo('/error');
} }
} }
} },
unloadAll: function() {
this.store.unloadAll('ClusterInfo');
},
}); });

View File

@ -418,3 +418,39 @@ div.attempt-info-panel table > tbody > tr > td:last-of-type {
width: 14px; width: 14px;
display: inline-block; display: inline-block;
} }
.yarn-cluster-status i {
display: inline-block;
width: 12px;
height: 12px;
border-radius: 10px;
border: 1px solid;
margin: 3px;
vertical-align: bottom;
}
.yarn-cluster-status i.started {
border-color: #43b135;
background-color: #60cea5;
}
.yarn-cluster-status i.stopped {
border-color: #b04b4e;
background-color: #ef6162;
}
.yarn-cluster-status i.inited{
border-color: #1c95c0;
background-color: #26bbf0;
}
.yarn-cluster-status i.notinited {
border-color: #dca41b;
background-color: #ffbc0b;
}
.yarn-cluster-info {
display: flex;
margin-left: auto
}
.yarn-ui-footer {
display: flex;
padding: 10px 25px;
}

View File

@ -80,8 +80,8 @@
<br/> <br/>
</div> </div>
<div class="footer"> <div class="footer yarn-ui-footer">
<div class="container-fluid content"> <div>
<a href={{env.app.hrefs.license}} target="_blank"> <a href={{env.app.hrefs.license}} target="_blank">
Licensed under the Apache License, Version 2.0. Licensed under the Apache License, Version 2.0.
</a> </a>
@ -91,4 +91,13 @@
{{/if}} {{/if}}
</div> </div>
</div> </div>
<div class="yarn-cluster-info">
<div>
<strong>v{{model.firstObject.hadoopVersion}}</strong>
<span class="yarn-cluster-status yarn-tooltip" title="Hadoop Version: {{model.firstObject.getYARNBuildHash}} &#10;Started on: {{date-formatter model.firstObject.startedOn}}" data-toggle="tooltip" data-placement="top">
<i class={{lower model.firstObject.state}} />
</span>
<div>Started at {{date-formatter model.firstObject.startedOn}}</div>
</div>
</div>
</div> </div>

View File

@ -0,0 +1,28 @@
/**
* 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 { dateFormatter } from '../../../helpers/date-formatter';
import { module, test } from 'qunit';
module('Unit | Helper | date formatter');
// Replace this with your real tests.
test('it works', function(assert) {
let result = dateFormatter(42);
assert.ok(result);
});

View File

@ -0,0 +1,28 @@
/**
* 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 { lower } from '../../../helpers/lower';
import { module, test } from 'qunit';
module('Unit | Helper | lower');
// Replace this with your real tests.
test('it works', function(assert) {
let result = lower(42);
assert.ok(result);
});

View File

@ -1730,6 +1730,14 @@ ember-export-application-global@1.0.5:
version "1.0.5" version "1.0.5"
resolved "https://registry.yarnpkg.com/ember-export-application-global/-/ember-export-application-global-1.0.5.tgz#73bd641b19e3474190f717c9b504617511506bea" resolved "https://registry.yarnpkg.com/ember-export-application-global/-/ember-export-application-global-1.0.5.tgz#73bd641b19e3474190f717c9b504617511506bea"
ember-lodash@0.0.10:
version "0.0.10"
resolved "https://registry.yarnpkg.com/ember-lodash/-/ember-lodash-0.0.10.tgz#edf132aa54a983a87543a093615df03892c9a15c"
dependencies:
broccoli-merge-trees "^1.1.1"
ember-cli-babel "^5.1.5"
lodash-es "^3.10.0"
ember-qunit@^0.4.18: ember-qunit@^0.4.18:
version "0.4.24" version "0.4.24"
resolved "https://registry.yarnpkg.com/ember-qunit/-/ember-qunit-0.4.24.tgz#b54cf6688c442d07eacea47c3285879cdd7c2163" resolved "https://registry.yarnpkg.com/ember-qunit/-/ember-qunit-0.4.24.tgz#b54cf6688c442d07eacea47c3285879cdd7c2163"
@ -2945,6 +2953,10 @@ lockfile@~1.0.1:
version "1.0.3" version "1.0.3"
resolved "https://registry.yarnpkg.com/lockfile/-/lockfile-1.0.3.tgz#2638fc39a0331e9cac1a04b71799931c9c50df79" resolved "https://registry.yarnpkg.com/lockfile/-/lockfile-1.0.3.tgz#2638fc39a0331e9cac1a04b71799931c9c50df79"
lodash-es@^3.10.0:
version "3.10.1"
resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-3.10.1.tgz#a1c85d9829c9009004339dc3846dbabb46cf4e19"
lodash-node@^2.4.1: lodash-node@^2.4.1:
version "2.4.1" version "2.4.1"
resolved "https://registry.yarnpkg.com/lodash-node/-/lodash-node-2.4.1.tgz#ea82f7b100c733d1a42af76801e506105e2a80ec" resolved "https://registry.yarnpkg.com/lodash-node/-/lodash-node-2.4.1.tgz#ea82f7b100c733d1a42af76801e506105e2a80ec"